谁能简单地给我解释一下,根据文件类型改变Vim缩进行为的最简单方法是什么?例如,如果我打开一个Python文件,它应该缩进2个空格,但如果我打开一个Powershell脚本,它应该使用4个空格。
当前回答
我使用了一个用C语言写的工具autotab。它分析加载文件的前几千行,并确定Vim参数shiftwidth, tabstop和expandtab的值。
这是使用gcc -O autotab.c -O autotab进行编译的。与Vim集成的说明在顶部的注释头中。
Autotab相当聪明,但有时会让人困惑,特别是使用不同的缩进样式不一致地维护。
如果一个文件明显使用制表符或制表符和空格的组合来缩进,Autotab将通过考虑诸如跨连续行内部元素的对齐方式(如注释)等因素来确定所使用的制表符大小。
它适用于各种编程语言,并且可以容忍不遵守缩进增量的“带外”元素,例如C预处理指令、C语句标签,更不用说明显的空行了。
其他回答
虽然你可以使用缩进插件或手动使用设置来配置Vim的缩进,但我建议使用一个名为Vindect的python脚本,当你打开一个python文件时,它会自动为你设置相关设置。使用这个技巧可以使Vindect的使用更加有效。当我第一次开始编辑别人用各种缩进样式(制表符vs空格和空格数量)创建的python文件时,这令人难以置信地沮丧。但是Vindect和这个缩进文件一起
还建议:
pythonhelper python_match python_ifold
对于那些使用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。
在Lua(对于Neovim用户)中,您可以使用RUNTIMEPATH/ftplugin/*yourfiletype*。Lua选项如下:
vim.opt_local.shiftwidth = 2
vim.opt_local.tabstop = 2
只是要确保在引号中使用字符串值。例如:
vim.opt_local.foldmethod = 'marker'
根据~/.vimrc中的文件后缀放置autocmd命令
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
您要查找的命令可能是ts=和sw=
我通常使用expandtab set,但这对makefile不好。我最近补充道:
:autocmd FileType make set noexpandtab
到。vimrc文件的末尾,它可以识别Makefile, Makefile和*。Mk作为makefile文件,不展开制表符。可以推测,您可以扩展它。
推荐文章
- JavaScript错误(Uncaught SyntaxError:意外的输入结束)
- 从包含文件名的路径获取不包含文件名的完整路径
- 使用vimdiff查看所有' git diff '
- 如何在IntelliJ中为整个项目配置“缩短命令行”方法
- Git:从另一个分支复制目录中的所有文件
- PHP,获取没有文件扩展名的文件名
- 禁止在vim中创建交换文件
- NERDTree重载新文件
- 如何在远程系统上使用Ansible任务移动/重命名文件
- 在Vim中,我想返回一个词。w的反义词
- 从java.io.File获取java.nio.file.Path对象
- 在tmux模式中丢失vim配色方案
- 在VIM中删除光标后面或周围的单词
- 用c#编写数据到CSV文件
- 安卓系统;检查文件是否存在而不创建新的文件