谁能简单地给我解释一下,根据文件类型改变Vim缩进行为的最简单方法是什么?例如,如果我打开一个Python文件,它应该缩进2个空格,但如果我打开一个Powershell脚本,它应该使用4个空格。


当前回答

使用ftplugins或autocommands设置选项。

ftplugin

在~ /维姆- ftplugin python。维姆:

setlocal shiftwidth=2 softtabstop=2 expandtab

别忘了打开~/.vimrc:

filetype plugin indent on

(:h ftplugin获取更多信息)

autocommand

在~ / . vimrc:

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

我还建议学习tabstop和softtabstop的区别。很多人都不知道softtabstop。

其他回答

根据~/.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'

就我个人而言,我在.vimrc中使用这些设置:

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab

使用ftplugins或autocommands设置选项。

ftplugin

在~ /维姆- ftplugin python。维姆:

setlocal shiftwidth=2 softtabstop=2 expandtab

别忘了打开~/.vimrc:

filetype plugin indent on

(:h ftplugin获取更多信息)

autocommand

在~ / . vimrc:

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

我还建议学习tabstop和softtabstop的区别。很多人都不知道softtabstop。

我使用了一个用C语言写的工具autotab。它分析加载文件的前几千行,并确定Vim参数shiftwidth, tabstop和expandtab的值。

这是使用gcc -O autotab.c -O autotab进行编译的。与Vim集成的说明在顶部的注释头中。

Autotab相当聪明,但有时会让人困惑,特别是使用不同的缩进样式不一致地维护。

如果一个文件明显使用制表符或制表符和空格的组合来缩进,Autotab将通过考虑诸如跨连续行内部元素的对齐方式(如注释)等因素来确定所使用的制表符大小。

它适用于各种编程语言,并且可以容忍不遵守缩进增量的“带外”元素,例如C预处理指令、C语句标签,更不用说明显的空行了。