vim 如何对不同的语言采用不同的键映射

我想把大括号映射成输入左大括号就有这样的效果

int main(void){
    //缩进了
}

我通过修改home目录下的.vimrc可以达到效果,问题是这样设置是对所有的文件都有效的,
C++我想有这样的效果,但是别的语言(如python/lua)我不想有这样的映射,怎样针对某种语言进行vim的设置呢?
要修改哪个文件呢?

阅读 4.4k
2 个回答

问题已解决,在~/.vim/ftplugin/ 目录下面找到特定语言对应的配置文件。
比如在我的ubuntu下找到了~/.vim/ftplugin/cpp.vim ,在最后一行加上了

:imap { {<CR>}<ESC>O

这样对于所有的cpp 文件这个设置都会生效。但是如果是其它扩展名的文件则不生效。
BTW:如果是像我一样的vim新手不会map的话,可以在进入vim之后使用:help map 命令查看帮助。
Done.

也是写在.vimrc里,但是要指定文件类型:

filetype indent on
autocmd FileType cpp setlocal ......
# 后面省略号为具体设置,空格分隔,缩写见下表
变量名 缩写 含义
(no)autoindent ai 自动缩进,即为新行自动添加与当前行同等的缩进。
(no)cindent ci 类似C语言程序的缩进
(no)smartindent si 基于autoindent的一些改进
tabstop=X ts 编辑时一个TAB字符占多少个空格的位置。
shiftwidth=X sw 使用每层缩进的空格数。
(no)expandtab (no)et 是否将输入的TAB自动展开成空格。开启后要输入TAB,需要Ctrl-V<TAB>
softtabstop=X sts 方便在开启了et后使用退格(BACKSPACE)键,每次退格将删除X个空格
(no)smarttab (no)sta 开启时,在行首按TAB将加入sw个空格,否则加入ts个空格。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏