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

Jam*_*mes 75 vim

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

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/\/\//<Esc><Esc>
:map <C-T> :s/\/\/// <Esc><Esc>
Run Code Online (Sandbox Code Playgroud)

但是,当我编辑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>
Run Code Online (Sandbox Code Playgroud)

ham*_*mar 75

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

所以你可以做点什么

autocmd FileType python map <buffer> <C-G> ...
Run Code Online (Sandbox Code Playgroud)


fre*_*ass 61

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>
Run Code Online (Sandbox Code Playgroud)

  • 你忘了`<buffer>`部分. (6认同)

ale*_*tes 6

我更喜欢将配置放在单个文件中,所以我使用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
Run Code Online (Sandbox Code Playgroud)

当您获取源代码时,Vim不会清除set autocmds vimrc,因此启动vim,更改您的内容vimrc并运行:so ~/.vimrc会定义两次autocmds。这就是为什么将绑定分组并用清除的原因autocmd! group_name。您可以在这里阅读更多内容

由于默认情况下映射应用于每个缓冲区,并且您只想更改与文件类型匹配的缓冲区<buffer>的映射,因此该修饰符位于其中,从而将映射限制为本地缓冲区。