vi <ファイル名>をsudoするときに構文が強調表示されないのはなぜですか?


27

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

3
vi色をサポートしていないため、色を示すものはすべて実行中vimまたは類似しています。
クリスS

回答:


26

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

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

/usr/bin/vim 

通常のユーザーの下で

/bin/vi

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

which vi

通常のユーザーの下で1回、sudoを介してもう1回

sudo which vi

やる

man which 

詳細が必要な場合


私は、使用のvimにrootアカウントを変更するが、ちょうどviのは、私のユーザーとしてのvimにエイリアスされたことが示されたことを知ることにsudo vimのを使用するように言われます。<ファイル>の代わりにsudo viの<ファイル>はなかった
スコット・ラングレン

17

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

sudo vim /some/file

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


はい!罪悪感の答えは、私が望んでいた行動を得るために必要なものだったようです
スコット

11

あなたはviおそらく/bin/viパッケージからvim-minimal構文の強調表示をサポートしていません。あなたのためにsudo vi起動/bin/viします。

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

sudo vi

vivimそのエイリアスが定義されていても、に置き換えられません。

解決策は、別のエイリアスを定義することです(呼び出すユーザー用sudo):

エイリアスsudo = 'sudo'

2番目以降のスペースに注意してくださいsudo

これを使用してsudo、bashはviinのエイリアス展開を行いsudo viます。aliasBash doc のセクションには次のように書かれています:

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

コマンドを入力したら、Ctrl+ Alt+ Eを押しbashて展開結果を表示できます。

クレジット:

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

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


単にエイリアスを作成viして/root/.bashrcも機能しません。

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

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

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


sudoでエイリアスを作成する素晴らしいトリック!
コーリーヘンダーソン

これが大好き-シンプルでエレガント!!! これが正解です。
FilmJ

3

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

cat <<_EOF >>/root/.bashrc

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

2

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


1

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

sudo cp -r ~/.vi* /root/ そんな感じ。

nb:~/vi*vimに対応していないファイルに対応していないか確認してください。


0

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

2)/etc/vim/vimrc回線があることを確認しますsyntax on

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


/ etc / vim / vimrcはありませんでしたが、/ etc / vimrcにはデフォルトで構文の強調表示がありました:if&t_Co> 2 || セットhlsearch endifのhas( "gui_running")構文
スコット

-1

まだ助けを探している人のために、これらのコマンドを試してください。

  • sudovi = which sudo vi
  • usrvi = which vi
  • これら2つの場所が同じ場合は、続行しないでください。

さもないと...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (シンボリックリンク)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.