2013-03-28 34 views
3

在askubuntu.com上我被告知如何run python on Vim。我正在测试可以在using python to solve a non linear equation处使用代码第1或第2代码python代码的设置。在vim上运行python

我唯一做的不同是在最后一行添加了print(a)。我昨天从外壳跑出来,它运行得很好。有人能告诉我发生了什么问题吗?

好了,所以我纠正与适当的问号vimrc的,

chmod +x ~/path/to/file/hw6problem2.py 

然后从VIM我跑

:Shell ./# 

,但我又收到了同样的语法错误。 (是否有文件被保存为.SH,因为我不能得到任何.py文件来运行?)

[email protected]:~$ vim /home/dustin/Documents/School/UVM/Engineering/OrbitalMechanics/hw6problem2.py 

File "hw6problem2.py", line 14 
a0 = max(s/2, (s - c)/2) 
^ 
SyntaxError: invalid syntax 

shell returned 1 

Press ENTER or type command to continue 

的vimrc

syntax on 
au BufWinLeave * mkview "records settings 
au BufWinEnter * silent loadview "reloads settings 


set nu "puts line numbers on 
set ic "case insensitive 
set foldmethod=syntax "for the latex-suite 
set autoread "autoload when files in the buffer have been modified 
set autochdir "autochange directory 


"set wrap 
set wrap 
" set lines=50 columns=80 

" resizes window 
:map g1 :set lines=20<CR>:set columns=80<CR> 
:map g2 :set lines=50<CR>:set columns=80<CR> 
:map g3 :set lines=50<CR>:set columns=170<CR> 
:map <F6> :! firefox % &<CR> 
:map E Ea 

"set autoindent 

set tabstop=4 
set shiftwidth=2 
set expandtab 
set smartindent 
" 
" Stuff for latex-suite 

" REQUIRED. This makes vim invoke Latex-Suite when you open a tex file. 
" It also allows you to set different actions for different filetypes 
" in ~/.vim/after/ftplugin/*.vim 
filetype plugin on 

set shellslash 

" IMPORTANT: grep will sometimes skip displaying the file name if you 
" search in a singe file. This will confuse Latex-Suite. Set your grep 
" program to always generate a file-name. 
set grepprg=grep\ -nH\ $* 

" OPTIONAL: This enables automatic indentation as you type. 
filetype indent on 

" OPTIONAL: Starting with Vim 7, the filetype of empty .tex files defaults to 
" 'plaintex' instead of 'tex', which results in vim-latex not being loaded. 
" The following changes the default filetype back to 'tex': 
let g:tex_flavor='latex' 
let g:Tex_ViewRule_pdf = 'okular' 


""""""""""""""""""""""""""""""""""""""" 
" => Shell command 
""""""""""""""""""""""""""""""""""""""" 

command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>) 

function! s:RunShellCommand(cmdline) 
let isfirst = 1 
let words = [] 
for word in split(a:cmdline) 
if isfirst 
    let isfirst = 0 " don't change first word (shell command) 
else 
    if word[0] =~ '\v[%#<]' 
    let word = expand(word) 
    endif 
    let word = shellescape(word, 1) 
endif 
call add(words, word) 
endfor 
let expanded_cmdline = join(words) 
rightbelow new 
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap 
call setline(1, 'You entered: ' . a:cmdline) 
call setline(2, 'Expanded to: ' . expanded_cmdline) 
call append(line('$'), substitute(getline(2), '.', '=', 'g')) 
silent execute '$read !'. expanded_cmdline 
1 
endfunction 
+0

你可以在第14行发布一些代码吗? – 2013-03-28 00:54:04

+1

这可能与Vim无关。 Python的这一行也没有错。请张贴整个Python文件(或链接到它的大小,如果它很大)或更多的上下文。我怀疑你只是介绍一个错字或什么的。 – 2013-03-28 00:54:36

+1

@PavelAnossov代码在第二个链接 – dustin 2013-03-28 00:59:30

回答

2

这很可能是一个Python的问题。

另一方面,执行脚本和将输出重定向到vim缓冲区(分割窗口)有很好的shell函数。

语法执行当前脚本(你应该使用chmod + x和家当线):

:Shell ./# 

为了增加功能,将它添加到.vimrc

command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>) 

function! s:RunShellCommand(cmdline) 
    let isfirst = 1 
    let words = [] 
    for word in split(a:cmdline) 
    if isfirst 
     let isfirst = 0 " don't change first word (shell command) 
    else 
     if word[0] =~ '\v[%#<]' 
     let word = expand(word) 
     endif 
     let word = shellescape(word, 1) 
    endif 
    call add(words, word) 
    endfor 
    let expanded_cmdline = join(words) 
    rightbelow new 
    setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap 
    call setline(1, 'You entered: ' . a:cmdline) 
    call setline(2, 'Expanded to: ' . expanded_cmdline) 
    call append(line('$'), substitute(getline(2), '.', '=', 'g')) 
    silent execute '$read !'. expanded_cmdline 
    1 
endfunction 

https://github.com/ruslanosipov/dotfiles/blob/master/.vimrc#L137

+0

我将上面的代码添加到我的vimrc中,然后用#!/ usr/bin/env python的shebang行运行代码,但收到以下错误:处理BufWinEnter时检测到错误“*”的自动命令: E32:名称 按ENTER键或键入命令继续 – dustin 2013-03-28 04:17:51

+0

'bin /'和'env':'#!/ usr/bin/env python'之间没有空格。试着做':Shell ./%' – 2013-03-28 04:23:11

+0

这是一个错字。现在它说检测到“*”,而处理BufWinEnter自动命令的错误: E32:没有文件名检测 错误,同时处理功能 7_RunShellCommand: 线20: E499:为“%”或“#”空文件名而已,使用“:p:h”:$ read!./% 按ENTER或键入命令继续 – dustin 2013-03-28 04:25:28