乡亲们!
我将vim用作IDE来用bash,Python和C编写代码。此外,我还有一个密钥映射来执行当前缓冲区,具体取决于文件类型。这是我的.vimrc的负责部分:
...
autocmd FileType python call Python_source()
autocmd FileType sh call Bash_source()
...
" Read lw (lispwords) modelise from current buffer and pass it as command arguments
func! LWargs()
set lw=''
doautocmd BufRead
if len(&lw) > 0 && len(&lw) < 512
return ' ' . &lw
endif
return ''
endfunc
func! Python_source()
setlocal number cursorline
setlocal shiftwidth=2
setlocal foldmethod=indent
map <F9> :w \| :exe '!python' '%:p' . LWargs()<CR>
imap <F9> <Esc> :w \| :exe '!python' '%:p' . LWargs()<CR>
" Comments on Ctrl-C
map <C-C> :call ToggleComment('#')<CR>
imap <C-C> <Esc>:call ToggleComment('#')<CR>li
endfunc
func! Bash_source()
setlocal number cursorline
setlocal shiftwidth=4
map <F9> :w \| :!./%<CR>
imap <F9> <Esc> :w \| :!./%<CR>
map <C-C> :call ToggleComment('#')<CR>
imap <C-C> <Esc>:call ToggleComment('#')<CR>li
endfunc
...
因此,当我按F9键时,魔术发生了,并且我的代码由LWargs传递的参数执行。唯一的问题是程序退出后,vim会跳到文件的开头,这迫使我将光标定位在我正在工作的那一行上,这使我的生活更加艰难。有什么方法可以防止Vim跳来跳去吗?
问题出doautocmd BufRead
在您的中的命令,该命令LWargs()
会将光标位置重置到文件的顶部。
(至少在我的情况下,打开Vim时用于恢复光标位置的命令是导致光标移动的命令。您可以检查列表中的内容,:autocmd BufEnter *
以查看是否可以找到类似的命令或其他可能导致光标移动的命令。再看看,事实证明我也从我的Linux发行版中得到了同样的规则...)
防止这种情况的一种好方法是通常使用winsaveview()
保存光标的位置和窗口视图(在最上面的那一行,关闭自动换行时窗口是否向右滚动到一列)并winrestview()
恢复它。
这是LWargs()
不会移动光标的更新:
功能! 如果len(&lw)> 0 && len(&lw)<512 返回'',则LWargs() 设置lw = let saved_view = winsaveview() doautocmd BufRead调用winrestview(saved_view)。&lw endif return''结束 函数
另请注意,正确的语法是set lw=
,如果您使用,则将set lw=''
设置两个字符的字符串并用两个单引号引起来。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句