你能在Vim中使用特定于文件类型的键绑定吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你能在Vim中使用特定于文件类型的键绑定吗?相关的知识,希望对你有一定的参考价值。

在我的.vimrc文件中,我有一个用于注释的键绑定,在行之前插入双斜杠(//

" the mappings below are for commenting blocks of text
:map <C-G> :s/^////<Esc><Esc>
:map <C-T> :s///// <Esc><Esc>

但是,当我编辑Python脚本时,我想将其更改为#标记以供注释

我的Python.vim文件夹中有一个.vim/ftdetect文件,它也有tabwidths等设置。如果可能的话,覆盖键绑定的代码是什么,所以我使用Python:

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/#/<Esc><Esc>
:map <C-T> :s/#/ <Esc><Esc>
答案

ftdetect文件夹用于检测文件类型的脚本。 Filetype插件必须位于ftplugin文件夹中。文件类型必须以下列三种形式之一包含在文件名中:

  • .../ftplugin/<filetype>.vim
  • .../ftplugin/<filetype>_foo.vim
  • .../ftplugin/<filetype>/foo.vim

例如,您可以映射cpp文件类型的注释,将以下内容放在.../ftplugin/cpp_mine.vim中:

:map <buffer> <C-G> :s/^////<Esc><Esc>
:map <buffer> <C-T> :s///// <Esc><Esc>
另一答案

您可以使用:map <buffer> ...为活动缓冲区创建本地映射。这要求你的Vim是用+localmap编译的。

所以你可以做点什么

autocmd FileType python map <buffer> <C-G> ...
另一答案

顺便说一句......如果你的主要问题是评论...你应该查看'nerdcommenter'插件,这是在java / c / c ++ / python / dos_batch_file / etc等中评论/取消注释代码的最快方法。

另一答案

我更喜欢将我的配置放在一个文件中,因此我使用autocmd方法。

augroup pscbindings
  autocmd! pscbindings
  autocmd Filetype purescript nmap <buffer> <silent> K :Ptype<CR>
  autocmd Filetype purescript nmap <buffer> <silent> <leader>pr :Prebuild!<CR>
augroup end

当您获取vimrc时,Vim不会清除set autocmds,因此启动vim,更改vimrc中的某些内容并运行:so ~/.vimrc将定义autocmds两次。这就是使用autocmd! group_name对绑定进行分组和清除的原因。你可以阅读more here

由于默认情况下映射应用于每个缓冲区,并且您希望仅为匹配文件类型的缓冲区更改它们,因此<buffer>修饰符位于此处,将映射限制为本地缓冲区。

另一答案

对于前来这里遇到任何ftplugin脚本工作有困难的人来说,这只是一个部分答案,但请记住你的.vimrc(或它所源的文件)应该包含

filetype plugin on

要么

:filetype plugin on

for filetype-plugins在加载给定类型的文件时执行。

以上是关于你能在Vim中使用特定于文件类型的键绑定吗?的主要内容,如果未能解决你的问题,请参考以下文章

哪种 MIME 类型用于特定于我的程序的二进制文件?

你能在每个块中捕获不止一种类型的异常吗? [复制]

您可以在 PhoneGap 中添加特定于平台的代码吗?

如何更改用于在 vim 中自动完成的键绑定?

将控件的高度绑定到特定于单位的测量值

你能在类型数组上写扩展方法吗?