Emacs在编辑C文件时,强迫我遵循特定的缩进。当我在错误的缩进行上按Tab键时,它会更正缩进。我想从我的vim编辑器中获取此行为。直到现在我已经做了以下事情:
set cindent
set smartindent
set autoindent
set expandtab
set tabstop=2
set shiftwidth=2
set cinkeys=0{,0},:,0#,!,!^F
在我的.vimrc文件中。但是,我没有达到我想要的类似emacs的强制效果。
在vim中可以吗?
答案 0 :(得分:11)
'smartindent'
已过时。你真的没有理由在你的vimrc中拥有它。
'cindent'
否决'smartindent'
,因此在vimrc中设置两者都是毫无意义的。在你的vimrc中设置'cindent'
也不是很有用,因为它只适用于类C语言。
filetype indent on
将启用特定于文件类型的缩进插件(c.f.,indent
下的$VIMRUNTIME
目录)。与'autoindent'
配对至少为您提供基本的自动缩进支持,无论您正在编辑哪种文件类型。
如果要为特定文件类型添加缩进设置,可以在~/.vim/indent/<filetype>.vim
中创建自己的缩进脚本,如果要扩充现有的系统范围缩进脚本,则可以~/.vim/after/indent/<filetype>.vim
。
当您发布的设置显示时,在插入模式下按 Ctrl f 将执行当您按 Tab 时Emacs执行的操作。这在:help indentkeys-format描述。启用'cinkeys'
且'cindent'
为空时使用'indentexpr'
。 'indentkeys'
正好相反。修改设置只是稍作修改,因此除了 Ctrl f 之外,还可以使用 Tab 代替/。
最后,我建议你学习Vim的帮助。一旦你搞清楚了,它就会非常彻底和易于使用。 :help usr_toc是开始用户级文档的好地方。 :help描述了一些关于导航帮助,如何搜索主题等的基本知识。
答案 1 :(得分:2)
如果我理解正确的话,==
命令就是你想要的。它根据语法规则重新使用当前行。
至于将它绑定到制表符,这当然是可能的,但我还没有这样做,并且我不完全确定如何能够抓住它应该实际插入制表符的正确时刻以及何时应重新播放。
就个人而言,我发现只需按==
就不那么容易了。 =
甚至接受范围,因此您可以进入可视模式,进行选择并点按=
,该区域将重新缩进。