2013-10-16 175 views
3

其实我有以下的情况,那究竟是什么工作:的.vimrc绝对或相对路径/ whatelse

假设你有作为一个文件根的工作,但你要自己乌尔的.vimrc不需要调用“-u”。 于是我开始了下面的“插件”:

let g:realuser=system('w | grep $(ps w | grep ' . getpid() . ' | head -n1 | awk "{ print \$2 }") | awk "{ print \$1 }"') 
if $USER == 'root' 
    let g:vimrc=system('printf /home/%s/.vimrc '. g:realuser) 
    if filereadable(g:vimrc) 
     exec ":source " . g:vimrc 
     finish 
    endif 
endif 

我把它称为“realuser.vim”和“源”,它在根的.vimrc里(/root/.vimrc)。

如果您现在通过SSH或通过GNOME通过Ubuntu登录到您的服务器,您将转到“su - ”并以root身份登录。然后你转到你的工作目录并打开文件。 脚本检测到登录到本机的真实用户是“yourlogin”。然后它检查/ home/yourlogin /文件“.vimrc”是否存在。所以,这是它加载它。

我的问题是,在/home/yourlogin/.vimrc是以下行:

source ~/.vim/plugin/someplugin.vim 

所以,你猜怎么着。 /root/.vimrc加载/home/yourlogin/.vimrc,因此会检查/root/.vim/plugin/someplugin.vim,因为它只存在于/home/yourlogin/.vim中,所以不会检测它。

我如何使用相对路径或这样的事情来告诉vim源文件只在/home/yourlogin/.vim/中?

回答

7

相当于:source的是:runtime

source ~/.vim/plugin/someplugin.vim 

成为

runtime plugin/someplugin.vim 

有了这个,只要你还适应于'runtimepath'选择的路径,它应该工作。

或者,您也可以在Vim中更改$HOME的值;这会影响的~扩张,太:

:let $HOME = '/home/yourlogin' 
+0

这很像一个魅力,但实际上我仍然有一些Filetype-Plugins的问题。他们是由“filetype插件”自动加载我猜,但它仍然加载/root/.vim/ftplugin/*而不是/home/yourlogin/.vim/ftplugin/*。这就是我最后一个问题,我猜。 我的第一个问题的解决方案是'exec':let $ HOME ='“。系统('printf/home /%s'。g:realuser)。 “”“' – boesing

0

你可能在这个过程中学到了很多,所以我不认为这是浪费时间,但...解决您的实际问题就是使用sudoedit。见$ man sudo

另外,如果您需要升级权限以进行扩展编辑会话,则应该花些时间修改您的设置/工作流程。