Ubuntu Hardy 自带的 vi 默认版本是 7.1 或 7.2。因此我从源代码安装了 vim 7.3。
然后为了方便,我将其添加到我的.bashrc
alias vi='vim'
为了让 7.3 vim 覆盖旧版本的 vi。这对我来说没问题,但是当我在之前添加 sudo 时,会出现类似
sudo vi /usr/local/nginx/conf/nginx.conf
它给了我旧版本
谁能告诉我这是为什么?
答案1
六7.2 和 7.3不存在。 只有六050325和vim7.2两个完全独立的程序,但功能相似。如果您想要vim, 类型vim
。
您的别名不起作用的原因在于别名是由您的 shell 扩展的,而 shell 不知道每个程序将要做什么 —— 它将“ sudo
”视为命令,将“ vi myfile
”视为参数,并且只尝试扩展第一个单词“ sudo
”,而不敢触碰参数。
你能告诉狂欢通过添加别名来扩展某些命令后的别名,例如:(注意引号内的空格是必需的)
alias sudo="sudo "
空格将告诉 bash“ sudo
”后的第一个单词是应该扩展的命令——例如,现在"sudo vi ..."
扩展为“ sudo vim ...
”就可以了。
答案说得/root/.bashrc
不对,有几个原因。首先,sudo
执行给定的命令没有运行 shell。(可以使用或进行更改,但如果未给出任何选项,则默认行为是直接执行命令,而不使用 shell。)sudo -s cmd
sudo -i cmd
其次,bash 只会在以下情况下扩展别名:交互的模式,而不是以 方式运行时,后者才是应该使用的。(同样,这可以更改,但默认设置是仅以交互方式扩展别名。)bash -c cmd
sudo
答案2
别名是针对每个用户的。您的第一个命令仅将别名分配给了您的非特权用户,当您使用 sudo 时,它将以 root 身份运行。您也应该为 root 用户创建别名。
答案3
运行时sudo vi
,
sudo
加载/root/.bashrc
文件。并确定它是别名还是原始文件(即vim
)。- 然后解析该
vi
部分/root/.vimrc
是否存在。否则/etc/vim/vimrc