这里有很多话题要讨论,所以废话不多说:
映射
您当前的映射map <c-k> ... 只能在正常、可视和等待操作员模式下工作。但是,在可视模式或操作员挂起模式下执行映射将只保存一系列行的缓冲区(读取不好)。我建议你只为普通模式制作映射。
两条一般经验法则:
- 始终提供
n 之类的模式以表示正常。
- 除非您要映射到
<Plug> 映射,否则请始终使用 noremp 而不是 map。
因此,您的其中一个映射可能类似于以下内容:
nnoremap <c-k> :w<cr>:!python %<cr>
更多信息:
:h :map-modes
:h map-overview
:h :nore
:h map-listing
:h map-verbose
基于文件类型的映射
你需要做两件事:
- 使用
noremap 的<buffer> 选项创建特定缓冲区的本地映射。
- 仅加载特定文件类型的映射。
这可以通过.vimrc 中的autocmd 和FileType 事件来完成,如下所示:
autocmd FileType python nnoremap <buffer> <c-k> :w<cr>:!python %:p<cr>
另一种方法是创建一个文件类型插件。 (详情请见:h ftplugin)
一个简单的例子是创建一个名为 ~/.vim/ftplugin/python.vim 的文件,并将您的映射放在里面,如下所示:
nnoremap <buffer> <c-k> :w<cr>:!python %:p<cr>
我个人更倾向于使用 ftplugin 方法,但在 .vimrc 文件中包含所有内容可能会很好。
如需更多帮助,请参阅:
:h :au
:h FileType
:h map-local
:h ftplugin
:make
更类似于 vim 的方法是使用 :make。 (假设您要 lint 与执行当前缓冲区)
-
:make 将执行 'makeprg'。它默认为 make,这是 C 项目中的佼佼者
- 运行
:make 后,quickfix 列表将包含任何错误。
- 通过
:compiler 命令设置您的编译器。
- 可以像这样传递额外的参数
:make foo-command
- 当前文件名可以用
% 表示。例如:make %
通常人们会在 ftplugins 旁边设置 :complier/'makeprg',例如~/.vim/ftplugin/perl.vim 或 autocmd 的例如autocmd FileType perl compiler perl.
更多帮助请看:
:h :make
:h 'makeprg'
:h :compiler
:h c_%
快速修复列表
- 使用
:cnext 和:cprev 在错误之间移动。
-
:copen 在窗口中打开快速修复列表(:cclose 关闭)
-
:cwindow 仅在出现错误时打开快速修复列表窗口
- 可能希望为
:cnext 和朋友使用更好的映射。我建议 Tim Pope 的 unimpaired 插件
如需更多帮助,请参阅以下内容:
:h quickfix
:h :cnext
:h :cope
使用:make 的替代方法
- 只需使用
<c-z> 挂起vim 并运行您的构建系统。 (缺点:在快速修复列表中松散)
- 使用
:! 编译。 (与暂停相同的缺点)例如:!make
-
Syntastic 是一个语法检查系统,在保存时检查文件
-
Ale(异步 Lint 引擎)是一个插件,用于在您编辑文本文件时在 NeoVim 和 Vim 8 中提供 linting
-
Dispatch 可用于在后台运行东西。非常适合测试套件
- 可能需要考虑终端多路复用器,例如 tmux 或 screen。
-
SingleComplile 尝试使用
:make 完成一些工作
结论
我个人会安装ALE,因为这消除了对映射的需要。学习如何使用位置(或快速修复)列表也是一个好主意。当您准备好动手时,您可以学习和使用:make。
tl;博士
安装ALE。