谁能简单地给我解释一下,根据文件类型改变Vim缩进行为的最简单方法是什么?例如,如果我打开一个Python文件,它应该缩进2个空格,但如果我打开一个Powershell脚本,它应该使用4个空格。
当前回答
在Lua(对于Neovim用户)中,您可以使用RUNTIMEPATH/ftplugin/*yourfiletype*。Lua选项如下:
vim.opt_local.shiftwidth = 2
vim.opt_local.tabstop = 2
只是要确保在引号中使用字符串值。例如:
vim.opt_local.foldmethod = 'marker'
其他回答
这可能是我们大多数人都知道的,但无论如何(我第一次感到困惑): 执行:set et (:set expandtabs)不会更改文件中已经存在的选项卡,必须执行:retab。 例如:
:set et
:retab
文件中的制表符被足够的空格替换。要让标签返回简单地做:
:set noet
:retab
当vim切换到特定文件类型时,可以添加要执行的.vim文件。
例如,我有一个文件~/.vim/after/ftplugin/html。Vim的内容如下:
setlocal shiftwidth=2
setlocal tabstop=2
这导致vim使用宽度为2个字符的制表符进行缩进(在我的配置中,noexpandtab选项是全局设置的)。
这里描述了:http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4,向下滚动到文件类型插件一节。
对于那些使用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中的文件后缀放置autocmd命令
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
您要查找的命令可能是ts=和sw=
就我个人而言,我在.vimrc中使用这些设置:
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
推荐文章
- 如何在vim中自动删除尾随空格
- 为什么Path。以Path.DirectorySeparatorChar开头的文件名合并不正确?
- git可以自动在空格和制表符之间切换吗?
- 为什么Vim使用~扩展名保存文件?
- Python列表目录,子目录和文件
- 我如何知道我在S3桶中存储了多少对象?
- 如果文件不存在,创建文件
- 如何在Vim或Linux中将空格转换为制表符?
- 是否有可能在MATLAB中每个文件定义多个函数,并从该文件外部访问它们?
- 我如何使用vimdiff来解决git合并冲突?
- 在Vim中删除当前缓冲区的文件名/路径
- 如何使用批处理文件写入文本文件?
- Git复制文件保存历史
- Git在终端提交时打开VIM,但无法返回终端
- 请参阅编辑器中的换行符和回车