Vim绑定某些热键与文件类型不同

3
我希望绑定以下内容:
  • 对于CSS、HTML文件: <c-space> <c-x><c-n>

  • 对于Ruby文件: <c-space> <c-x><c-u>

如何实现?
3个回答

7

这里有更加完整、精确和正确的文档,但简而言之:

在您的ftplugin文件夹中创建一个以您想要使用的文件类型命名的文件(如果需要,请创建此文件夹)。

├── vim
│   ├── after
│   ├── autoload
│   ├── bundle
│   ├── ftplugin
│   │   ├── python.vim
│   │   ├── rnoweb.vim
│   │   └── tex.vim
│   └── syntax

在其中一个文件中,例如python.vim文件中,有一行像这样的内容:
noremap! <buffer> <F5> <Esc>:w<CR>:!python % <CR>

这将是一个仅针对此文件类型、仅在此缓冲区中定义的绑定。请确保在您的 vimrc 文件中出现了 filetype plugin on 或类似的设置。

编辑:Peter Rincker 提出的优秀建议已经被采纳:使用 noremap 版本的 map 命令和 <buffer> 标志。他还提醒我们在我们的文件类型插件文件中使用 setlocal 而不是 set


你需要使用<buffer>标志来使映射局限于缓冲区。例如:inoremap <buffer> <c-space> <c-x><c-o>。你还需要注意使用setlocal设置选项。 - Peter Rincker

4

使用 autocmd 命令:

autocmd filetype css inoremap <buffer> <c-space> <c-x><c-n>  
autocmd filetype html inoremap <buffer> <c-space> <c-x><c-n>
autocmd filetype ruby inoremap <buffer> <c-space> <c-x><c-u>

2
你也可以将这些代码合并,autocmd filetype css,html setlocal... - dash-tom-bang
1
您必须删除 setlocal - plhn

3

将以下内容放入您的.vimrc文件中。将“do stuff”行替换为您的绑定。

:if match(@%, ".css") >=0 
: do css stuff
:endif

:if match(@%, ".rb") >=0 
: do ruby stuff
:endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接