我在我的项目中使用(Mac)Vim设置为使用2个空格作为标签,甚至还有一个脚本,可以在保存时将所有标签转换为2个空格。
当我与其他开发人员合作时,有时他们使用制表符而不是空格我正在寻找一种快速方式来切换两个不同的vim配置,很想在命令行上切换它们,就像这样
macvim --oh-no-not-tabs-again .
最佳做法是什么?
答案 0 :(得分:3)
您可以基于每个目录触发自动命令,因此您可以在没有热键的情况下自动配置任何内容。这就是我想出的:
" set up global defaults, these are mine
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
set expandtab
set autoindent
set smartindent
" override tab settings on a per-directory basis
function! SetStandardTabs()
set noexpandtab
set tabstop=8
set softtabstop=4
endfunction
augroup PerDirectoryTabs
autocmd!
autocmd BufRead,BufEnter,BufNewFile /path/to/csharp/files/* call SetStandardTabs()
augroup END
这会将vim配置为在/ path / to / csharp / files的子树中自动找出,并按照您想要的方式设置缓冲区局部变量。把它放在你的.vimrc中就可以了。
编辑这里有一些代码放在你的.vimrc中,它在树上搜索最近的“本地”.vimrc并来源(加载)它。谨慎使用!不要设置全局变量或做任何“有趣”的事情,你会得到难以诊断的行为。我还没有详尽地测试过它。它可能会吃你的孩子。你被警告了!
" per-subtree .vimrc
function! FindAndSourceLocalVimrc()
if exists('g:inFindLocalVimrc')
return
endif
let g:inFindLocalVimrc=1
let v = findfile('.vimrc', '.;')
if exists('v')
let v = fnamemodify(v, ':p')
if v != $MYVIMRC
exe "source " . v
endif
endif
unlet g:inFindLocalVimrc
endfunction
call FindAndSourceLocalVimrc()
我确信从现在起10年后,我会找到一些已经存在的内置方式来在一行中完成。
答案 1 :(得分:1)
我知道这可能有点宗教,但标签更容易处理,因为你可以设置它们的间距。当有人设置空格而不是标签时,它就会停留在那里,喜欢标签的人必须做各种疯狂的转换才能再次正确。
如果你想要标签是2个字符,那么在你的vimrc中:
set ts=2
set sw=2
此外,您不需要脚本来进行转换。只需使用set expandtab
,当您输入制表符时自动执行此操作。
答案 2 :(得分:0)
几年前,我在C中开发了一个名为autotab
的实用程序。它分析文本文件的前几千行,然后发出Vim命令以设置该文件的:shiftwidth
,:expandtab
和:tabstop
设置。它适用于看起来像C的语言。autotab
知道是否使用空格或制表符和空格的组合来实现缩进。
程序中的注释标题提供了将其集成到Vim中的说明,以便在加载文件时自动调用它。
Autotab速度很快,因为它是用C语言编写的,并且仅依赖于标准库,因此它具有较低的启动开销,并且因为它限制了从文件中读取的行数。在每个文件加载时调用它的额外延迟几乎不可察觉。