谁能简单地给我解释一下,根据文件类型改变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=

其他回答

对于那些使用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文件的注释快捷方式。

对autocmd!告诉vim删除所述分组中以前定义的任何自动命令。如果再次获取.vimrc,这将防止重复定义。更多信息请参见:help augroup。

编辑~/。Vimrc,并为不同的缩进添加不同的文件类型,例如。我想html/rb缩进2个空间,和js/coffee文件缩进4个空间:

" 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空白参数

虽然你可以使用缩进插件或手动使用设置来配置Vim的缩进,但我建议使用一个名为Vindect的python脚本,当你打开一个python文件时,它会自动为你设置相关设置。使用这个技巧可以使Vindect的使用更加有效。当我第一次开始编辑别人用各种缩进样式(制表符vs空格和空格数量)创建的python文件时,这令人难以置信地沮丧。但是Vindect和这个缩进文件一起

还建议:

pythonhelper python_match python_ifold

根据~/.vimrc中的文件后缀放置autocmd命令

autocmd BufRead,BufNewFile   *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile   *.pl syntax on

您要查找的命令可能是ts=和sw=

在Lua(对于Neovim用户)中,您可以使用RUNTIMEPATH/ftplugin/*yourfiletype*。Lua选项如下:

vim.opt_local.shiftwidth  = 2
vim.opt_local.tabstop     = 2

只是要确保在引号中使用字符串值。例如:

vim.opt_local.foldmethod  = 'marker'