谁能简单地给我解释一下,根据文件类型改变Vim缩进行为的最简单方法是什么?例如,如果我打开一个Python文件,它应该缩进2个空格,但如果我打开一个Powershell脚本,它应该使用4个空格。
根据~/.vimrc中的文件后缀放置autocmd命令
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab autocmd BufRead,BufNewFile *.pl syntax on
您要查找的命令可能是ts=和sw=
我通常使用expandtab设置,但这对makefile不好。我最近补充道:
expandtab
:autocmd FileType make set noexpandtab
到。vimrc文件的末尾,它可以识别Makefile, Makefile和*。Mk作为makefile文件,不展开制表符。可以推测,您可以扩展它。
使用ftplugins或autocommands设置选项。
在~/.vim/ftplugin/python.vim:
~/.vim/ftplugin/python.vim:
setlocal shiftwidth=2 softtabstop=2 expandtab
别忘了在~/.vimrc中打开它们:
~/.vimrc
filetype plugin indent on
(:h ftplugin获取更多信息)
:h ftplugin
在~/.vimrc:
autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab
我还建议学习tabstop和softtabstop之间的区别。很多人不知道softtabstop。
tabstop
softtabstop
当vim切换到特定文件类型时,可以添加.vim文件来执行。
.vim
例如,我有一个包含以下内容的文件~/.vim/after/ftplugin/html.vim:
~/.vim/after/ftplugin/html.vim
setlocal shiftwidth=2 setlocal tabstop=2
这导致vim使用宽度为2个字符的制表符进行缩进(noexpandtab选项在我的配置中的其他地方全局设置)。
noexpandtab
这里描述:http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4,向下滚动到文件类型插件部分。
虽然你可以使用缩进插件或手动使用设置来配置Vim的缩进,但我建议使用名为Vindect的python脚本,当你打开python文件时,它会自动为你设置相关设置。使用本技巧可以使Vindect的使用更加有效。当我第一次开始编辑别人用各种缩进样式(制表符vs空格和空格数量)创建的python文件时,这令人难以置信地沮丧。但是Vindect和这个缩进文件一起
还建议:
:set et
:set
:retab
:set et :retab
文件中的制表符被足够的空格替换。要让标签返回简单地做:
:set noet :retab
就我个人而言,我在.vimrc中使用这些设置:
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
编辑你的~/.vimrc,并为不同的缩进添加不同的文件类型,例如:我想要html/rb缩进2个空间,和js/coffee文件缩进4个空间:
html/rb
js/coffee
" by default, the indent is 2 spaces. set shiftwidth=2 set softtabstop=2 set tabstop=2 " for html/rb files, 2 spaces autocmd Filetype html setlocal ts=2 sw=2 expandtab autocmd Filetype ruby setlocal ts=2 sw=2 expandtab " for js/coffee/jade files, 4 spaces autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab
参考:根据文件类型设置Vim空白首选项
我使用了一个用C语言编写的名为autotab的实用程序。它分析你加载的文件的前几千行,并确定Vim参数shiftwidth, tabstop和expandtab的值。
autotab
shiftwidth
这是使用,例如,gcc -O autotab.c -o autotab编译的。与Vim集成的说明在顶部的注释头中。
gcc -O autotab.c -o autotab
Autotab相当聪明,但有时会让人困惑,特别是使用不同的缩进样式不一致地维护。
如果一个文件明显使用制表符或制表符和空格的组合来缩进,Autotab将通过考虑诸如跨连续行内部元素的对齐方式(如注释)等因素来确定所使用的制表符大小。
它适用于各种编程语言,并且可以容忍不遵守缩进增量的“带外”元素,例如C预处理指令、C语句标签,更不用说明显的空行了。
今天,你可以尝试editorconfig,它还有一个vim插件。这样,您不仅可以在vim中更改缩进大小,而且可以在许多其他编辑器中保持一致的编码风格。
下面是一个简单的编辑配置,如你所见,python文件将有4个缩进空格,而pug模板文件将只有2个。
# 4 space indentation for python files [*.py] indent_style = space indent_size = 4 # 2 space indentation for pug templates [*.pug] indent_size = 2
对于那些使用autocmd的人来说,将它们组合在一起是一个最佳实践。如果一个分组与文件类型检测相关,你可能会有这样的东西:
autocmd
augroup filetype_c autocmd! :autocmd FileType c setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab :autocmd FileType c nnoremap <buffer> <localleader>c I/*<space><esc><s-a><space>*/<esc> augroup end
分组有助于保持.vimrc的组织性,特别是当一个文件类型有多个与之相关的规则时。在上面的例子中,定义了一个特定于.c文件的注释快捷方式。
.vimrc
对autocmd!的初始调用告诉vim删除上述分组中之前定义的任何自动命令。如果.vimrc再次被引用,这将防止重复定义。更多信息请参见:help augroup。
autocmd!
:help augroup
在Lua(对于Neovim用户)中,你可以使用RUNTIMEPATH/ftplugin/*yourfiletype*.lua,选项如下:
RUNTIMEPATH/ftplugin/*yourfiletype*.lua
vim.opt_local.shiftwidth = 2 vim.opt_local.tabstop = 2
只是要确保在引号中使用字符串值。例如:
vim.opt_local.foldmethod = 'marker'