web-dev-qa-db-ja.com

Sudo vi <filename>を実行するときに構文の強調表示がないのはなぜですか?

Sudoを使用しているときにviで編集しているファイルで構文の強調表示を許可する方法がわかりません。私がSudo vi <filename>の場合、端末は私の端末設定の白黒のみです。 viで:syntax onと入力しても、何も変わりません。

vi <filename>を実行すると、すべての構文が適切に色分けされます。 RHEL 5.4を使用して、関連する環境:

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;
33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;
32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;
32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.Zip=01;
31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;
31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;
35:*.png=01;35:*.tif=01;35:

Shell=/bin/bash

TERM=xterm-color
29
Scott Lundgren

ラークスの答えがおそらく最もありそうです。 rootアカウントviをvimに永久に変更したくない場合があります。リソースが少ない場合、viは常に機能することがほぼ保証されているため、vimについてはよくわかりません。

あなたはおそらく(色)を使用しています

/usr/bin/vim 

通常のユーザーの下で

/bin/vi

sudoまたはrootの下。以下を使用して確認できます。

which vi

一度は通常のユーザーの下に、もう一方はSudoを介して

Sudo which vi

する

man which 

詳細が必要な場合

27
user63673

RHELシステムでは、/bin/viは通常、vimの最小バージョンであり、構文の強調表示のサポートはありません。 /usr/bin/vimはフル機能のエディターです。ユーザー環境では、vivimのエイリアスである可能性が非常に高いです。これを試して:

Sudo vim /some/file

構文の強調表示を今すぐ取得しますか?

18
larsks

あなたのviはおそらく/bin/vivim-minimalで、構文の強調表示をサポートしていません。 Sudo vi/bin/viを起動します。

Bashはコマンドラインの最初のWordでのみエイリアス展開を行うので、次のようになります。

Sudo vi

エイリアスを定義しても、vivimに置き換えられません。

ソリューションは、別のエイリアスを定義します(Sudoを呼び出すユーザー用):

エイリアスSudo = 'Sudo'

2番目のSudoの後のスペースに注意してください。

このSudoを使用すると、bashはSudo viviのエイリアス拡張を実行します。 Bash docのaliasセクションには次のように書かれています:

エイリアス値の最後の文字が空白の場合、エイリアスに続く次のコマンドWordでもエイリアス展開がチェックされます。

コマンドを入力した後、 Ctrl+Alt+Ebashで展開結果を確認します。

クレジット:

https://bbs.archlinux.org/viewtopic.php?id=36796

http://www.shellperson.net/using-Sudo-with-an-alias


/root/.bashrcviにエイリアスを設定するだけでは機能しません。

/etc/profile.d/vim.shの一部のディストリビューションでは、ルートのviがエイリアスされていないことにも注意してください。

if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x /usr/bin/id ] || return
  ID=`/usr/bin/id -u`
  [ -n "$ID" -a "$ID" -le 200 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

これを変更しても問題は解決しません。

14
Fish Monitor

デフォルトでは、5.4ではviがデフォルトです。始めたバージョンを忘れています。これにより、必要なエイリアスが追加されます。

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
3
sinping

私のバージョンのvim(debian 7ではSudo apt-get install vimでインストール)で、syntax onコマンドが~/.vimrcでユーザーごとに定義されていることがわかりました。ただし、デフォルトでは、インストールは/root/.vimrcをロードするためのSudo viファイルを作成しませんでした。だから私は~/.vimrc/root/ディレクトリにコピーしただけで、これがうまくいきました:Sudo cp ~/.vimrc /root/

2
mulllhausen

これは、rootユーザーがvim構成ファイルを持っていないためです。したがって、標準ユーザーのvim構成ファイルをルートディレクトリにコピーするだけです。

Sudo cp -r ~/.vi* /root/のようなもの。

nb:vim用ではない~/vi*に対応するファイルがないかどうかを確認します。

1
Léo Derbois

1)viではなくvimを実際に使用しているかどうかを確認します(残念ながら、これは新しくインストールされたシステムでは多くの場合デフォルトです)。

2)/etc/vim/vimrcsyntax onという行があることを確認します

3)すべての種類のファイルにデフォルトで使用可能な構文強調情報があるわけではありません...

0
tsg