我的.vimrc中有这些绑定。它们大部分时间都在工作,但有时它们不会:它们只保存文件但不运行它。
然后我进入插入模式并退回到正常模式,然后再次工作。可能是什么问题?
谢谢!
autocmd FileType python map <C-k> :write <CR> :! python % <CR>
autocmd FileType lisp map <C-k> :write <CR> :! clisp % <CR>
autocmd FileType scala map <C-k> :write <CR> :! scala % <CR>
答案 0 :(得分:4)
这里有很多话题需要讨论,以便进一步讨论:
您当前的映射map <c-k> ...
仅适用于普通,可视和操作员待处理模式。但是,在可视模式或操作员挂起模式下执行映射会仅使用一系列行保存缓冲区(读取不好)。我建议你只为正常模式制作映射。
两条一般经验法则:
n
提供正常的模式。noremp
映射,否则请始终使用map
而不是<Plug>
。因此,您的一个映射可能看起来与此类似:
nnoremap <c-k> :w<cr>:!python %<cr>
了解更多信息:
:h :map-modes
:h map-overview
:h :nore
:h map-listing
:h map-verbose
你需要做两件事:
<buffer>
的{{1}}选项创建特定缓冲区的本地映射。这可以通过noremap
中的autocmd
和FileType
事件完成,如下所示:
.vimrc
另一种方法是通过创建文件类型插件。 (有关详细信息,请参阅autocmd FileType python nnoremap <buffer> <c-k> :w<cr>:!python %:p<cr>
)
一个简单的例子就是创建一个名为:h ftplugin
的文件,并将映射放在里面:
~/.vim/ftplugin/python.vim
我个人更倾向于使用ftplugin方法,但在nnoremap <buffer> <c-k> :w<cr>:!python %:p<cr>
文件中包含所有内容可能会很好。
如需更多帮助,请参阅:
.vimrc
:h :au
:h FileType
:h map-local
:h ftplugin
这样做更像vim的方法是使用:make
。 (假设您想要lint vs执行当前缓冲区)
:make
将执行:make
。默认为'makeprg'
,这是C项目的优秀作品make
后,quickfix列表将包含任何错误。:make
命令设置编译器。:compiler
:make foo-command
表示。例如%
通常,人们会在ftplugins的一侧设置:make %
/ :complier
,例如'makeprg'
或~/.vim/ftplugin/perl.vim
例如autocmd
。
更多帮助请看:
autocmd FileType perl compiler perl
:h :make
:h 'makeprg'
:h :compiler
:h c_%
和:cnext
在错误之间移动。:cprev
在窗口中打开quickfix列表(:copen
关闭):cclose
仅在出现错误时打开quickfix列表窗口:cwindow
和朋友使用更好的映射。我建议Tim Pope的unimpaired插件如需更多帮助,请参阅以下内容:
:cnext
:h quickfix
:h :cnext
:h :cope
:make
暂停vim并运行您的构建系统。 (缺点:在quickfix列表上松散)<c-z>
进行编译。 (与暂停相同的缺点)例如:!
:!make
我个人会安装ALE,因为这样就不需要你的映射了。学习如何使用位置(或quickfix)列表也是一个好主意。当您准备好弄脏手时,您可以学习并使用:make
。
安装ALE。
答案 1 :(得分:0)
在<CR>
和:
之间插入的空格可能会导致错误,因为在执行映射期间确实输入了此空间。
使用:noremap
或:nnoremap
(大部分时间都应该使用,正如Peter Rincker在他的回答中所写的那样),这不会是一个大问题,因为它只会移动光标右边有一个字符(见:h <space>
)。
但是使用:map
,它可以触发自定义映射(或部分映射)。
然后,而不是:
autocmd FileType python map <C-k> :write <CR> :! python % <CR>
以下情况会更好:
autocmd FileType python map <C-k> :write <CR>:! python % <CR>
而且这个,真的更好:
autocmd FileType python nnoremap <C-k> :write <CR>:! python % <CR>