Vim 维姆:为什么这些绑定只在某些时候起作用?
我的.vimrc中有这些绑定。它们大部分时间工作,但有时不工作:它们只保存文件而不运行它 然后我进入插入模式,退出它回到正常模式,然后它们再次工作。有什么问题吗 谢谢Vim 维姆:为什么这些绑定只在某些时候起作用?,vim,key-bindings,Vim,Key Bindings,我的.vimrc中有这些绑定。它们大部分时间工作,但有时不工作:它们只保存文件而不运行它 然后我进入插入模式,退出它回到正常模式,然后它们再次工作。有什么问题吗 谢谢 autocmd FileType python map <C-k> :write <CR> :! python % <CR> autocmd FileType lisp map <C-k> :write <CR> :! clisp % <CR> autocm
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>
autocmd文件类型python映射:write:!蟒蛇%
autocmd文件类型lisp映射:写入:!clisp%
autocmd文件类型scala映射:写入:!斯卡拉%
此处有许多主题需要讨论,因此无需进一步讨论:
映射
当前映射map…
仅在正常、可视和操作员挂起模式下工作。但是,在可视模式或运算符挂起模式下执行映射将只保存一系列行的缓冲区(读取不好)。我建议您只对正常模式进行映射
两条一般经验法则:
- 对于正常情况,始终提供类似
的模式n
- 始终使用
而不是noremp
,除非要映射到map
映射
nnoremap <c-k> :w<cr>:!python %<cr>
基于文件类型的映射
您需要做两件事:
- 使用
的noremap
选项创建本地到特定缓冲区的映射 - 仅加载特定文件类型的映射
.vimrc
中的autocmd
和FileType
事件来完成,如下所示:
autocmd FileType python nnoremap <buffer> <c-k> :w<cr>:!python %:p<cr>
我个人更倾向于ftplugin方法,但是在.vimrc
文件中有一个万事俱备的插件会很好
有关更多帮助,请参阅:
:h :au
:h FileType
:h map-local
:h ftplugin
:h :make
:h 'makeprg'
:h :compiler
:h c_%
:make
一种更像vim的方法是使用:make
。(假设您希望lint vs执行当前缓冲区)
将执行:make
。它默认设置为'makeprg'
,这是C项目的一大特点make
- 运行
后,快速修复列表将包含任何错误:make
- 通过
命令设置编译器:compiler
- 可以像这样传递额外的参数
:make foo command
- 当前文件名可以用
表示。e、 g.%
:make%
~/.vim/ftplugin/perl.vim
或autocmd
的文件类型perl编译器perl中设置do:compiler
/'makeprg'
Fop更多帮助请参见:
:h :au
:h FileType
:h map-local
:h ftplugin
:h :make
:h 'makeprg'
:h :compiler
:h c_%
快速修复列表
- 使用
和:cnext
在错误之间移动:cprev
在窗口中打开快速修复列表(:copen
关闭):cclose
仅在出现错误时打开快速修复列表窗口:cwindow
- 可能希望对
和朋友使用更好的映射。我推荐Tim Pope的插件:cnext
:h quickfix
:h :cnext
:h :cope
使用的替代方案:make
- 只需使用
挂起vim并运行构建系统。(缺点:在快速修复列表中出现) - 使用
:代码>编译。(与挂起相同的缺点)例如
:!制造
- 是一种语法检查系统,用于在保存时检查文件
- (异步Lint引擎)是一个插件,用于在编辑文本文件时在NeoVim和Vim 8中提供Lint
- 可以用来在后台运行东西。非常适合测试套件
- 尝试使用
:make
:make
tl;博士
安装。此处有许多主题需要讨论,无需进一步ado: 映射 当前映射
map…
仅在正常、可视和操作员挂起模式下工作。但是,在可视模式或运算符挂起模式下执行映射将只保存一系列行的缓冲区(读取不好)。我建议您只对正常模式进行映射
两条一般经验法则:
- 对于正常情况,始终提供类似
的模式n
- 始终使用
而不是noremp
,除非要映射到map
映射
nnoremap <c-k> :w<cr>:!python %<cr>
基于文件类型的映射
您需要做两件事:
- 使用
的noremap
选项创建本地到特定缓冲区的映射 - 仅加载特定文件类型的映射
.vimrc
中的autocmd
和FileType
事件来完成,如下所示:
autocmd FileType python nnoremap <buffer> <c-k> :w<cr>:!python %:p<cr>
我个人更倾向于ftplugin方法,但是在.vimrc
文件中有一个万事俱备的插件会很好
有关更多帮助,请参阅:
:h :au
:h FileType
:h map-local
:h ftplugin
:h :make
:h 'makeprg'
:h :compiler
:h c_%
:make
一种更像vim的方法是使用:make
。(假设您希望lint vs执行当前缓冲区)
将执行:make
。它默认设置为'makeprg'
,这是C项目的一大特点make
- 运行
后,快速修复列表将包含任何错误:make
- 通过
命令设置编译器:compiler
- 可以像这样传递额外的参数
:make foo command
- 当前文件名可以用
表示。e、 g.%
:make%
~/.vim/ftplugin/perl.vim
或autocmd
的文件类型perl编译器perl中设置do:compiler
/'makeprg'
Fop更多帮助请参见:
:h :au
:h FileType
:h map-local
:h ftplugin
:h :make
:h 'makeprg'
:h :compiler
:h c_%
快速修复列表
<