Answers:
如果可以集中配置本地异常,则可以将此类autocmds放入您的~/.vimrc
:
:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4
另一方面,如果您希望将特定配置与项目一起存储(并且不想通过Modelines将其嵌入所有文件中),则可以使用以下两个选项:
如果您总是从项目根目录启动Vim,则内置
:set exrc
启用.vimrc
从当前目录读取文件的功能。您可以:set ts=4 sw=4
在其中放置命令。
否则,您需要插件的帮助。vim.org上有几个;我可以推荐localrc插件,甚至允许本地文件类型特定的配置。
请注意,从文件系统读取配置具有安全隐患。您可能想要:set secure
。
autocmd
方法不起作用的问题,请确保您的路径中没有任何符号链接-我必须先放置没有符号链接的完整路径,然后才能对我有用(在OS X 10.9上)
您可以使用source
(so)命令将vim配置为读取更多命令。将此添加到您的~/.vimrc
-它会搜索当前目录,如果未找到.vimrc_proj文件,则在父目录中搜索.vimrc_proj。
if filereadable(".vimrc_proj")
so .vimrc_proj
else
if filereadable("../.vimrc_proj")
so .vimrc_proj
endif
endif
然后在.vimrc_proj
配置文件中添加任何自定义命令以适合您的项目。
您可以使用Vim插件通过尝试检测缩进以更一般的方式解决问题。
我选择的插件是DetectIndent。我花了一些时间测试插件的所有分支,以找到适合我需求的插件。原始的确实很近,但是距离不太远,所以我自己做了叉子。
对于调试,:set verbose=1
使用再次运行插件非常有帮助:DetectIndent
尚未提到的一种可能的解决方案是上一层并实现特定于项目的shell脚本以启动vim环境。
这允许使用-S
命令行选项传递特定于vim的设置。优点是它还允许配置环境的其他方面,例如终端或cscope设置。
例如,假设我有一个名为的C ++项目foo
,我想为此文件加载vim设置~/.vim/projects/foo.vim
。如果从某些快速启动工具或桌面快捷方式调用命令,我也想设置一个cscope索引并启动一个终端窗口。要打开我的环境,我有以下脚本,称为vim-foo
:
#!/bin/bash
# Script to setup the VIM development environment of my "foo" project
# Includes building ctags and cscope databases.
VIM_CONFIG=$HOME/.vim/projects/foo.vim
BASE_DIR=$HOME/work/foo
function setup_cscope()
{
CSCOPE_FILES=$BASE_DIR/cscope.files
created_files=false
# check if global cscope.files exist
if [ ! -f $CSCOPE_FILES ]; then
echo "Creating cscope.files"
find $BASE_DIR/src -name '*.cpp' -o -name '*.h' >> $CSCOPE_FILES
created_files=true
fi
# create cscope database
if [ $created_files ] || \
[ ! -f $BASE_DIR/cscope.in.out ] || \
[ ! -f $BASE_DIR/cscope.po.out ] || \
[ ! -f $BASE_DIR/cscope.out ]; then
echo "Creating cscope database"
cscope -b -q -i $CSCOPE_FILES
for f in in.out po.out out; do
mv cscope.$f $BASE_DIR/
done
fi
export CSCOPE_DB=$BASE_DIR/cscope.out
}
# setup everything and finally launch vim
setup_cscope
cd $BASE_DIR
if [[ $TERM == "rxvt-unicode" ]]; then
vim -S $VIM_CONFIG
else
urxvt -e vim -S $VIM_CONFIG
fi