vi <filename>을 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거나 유사합니다.
Chris S

답변:


26

Larks가 가장 가능성이 높습니다. vi가 거의 작동하는 것처럼 vi가 vim으로 영구적으로 root 계정 vi를 vim으로 변경하고 싶지 않을 수도 있습니다. vim에 대해서는 잘 모르겠습니다.

아마도 (컬러)를 사용하고있을 것입니다

/usr/bin/vim 

일반 사용자와

/bin/vi

sudo 또는 root에서. 다음을 사용하여 확인할 수 있습니다.

which vi

한 번은 일반 사용자와 다른 하나는 sudo를 통해

sudo which vi

man which 

더 자세한 정보가 필요하면


vim을 사용하도록 루트 계정을 변경하지는 않았지만 사용자가 sudo vi <file> 대신 sudo vim <file>을 사용하라고 지시함에 따라 vi가 vim의 별칭으로 표시되었음을 알았습니다.
Scott Lundgren

17

RHEL 시스템에서 /bin/vi일반적으로 vim구문 강조 지원이없는 최소 버전입니다 . /usr/bin/vim모든 기능을 갖춘 편집기입니다. 사용자 환경에서 vi의 별칭 일 가능성이 큽니다 vim. 이 시도:

sudo vim /some/file

구문 강조 표시가 지금 있습니까?


예! 그것은의 sinping 보인다 대답은 하나 내가 원하는 동작을 얻을 필요했다
스콧 Lundgren은

11

당신은 vi아마 /bin/vi패키지에서 vim-minimal구문 강조 기능을 지원하지 않습니다. 당신을 위해 sudo vi시작 /bin/vi합니다.

Bash는 명령 줄의 첫 번째 단어에서만 별칭 확장을 수행하므로 다음과 같습니다.

sudo vi

vivim해당 별칭이 정의 되어 있어도 대체되지 않습니다 .

해결책 은 다른 별명을 정의하는 것입니다 (사용자가 호출하는 경우 sudo).

별명 sudo = 'sudo'

두 번째 뒤에 공백이 sudo있습니다.

이 사용 sudo, 배쉬에 대한 별칭 확장을 다하겠습니다 vi에서 sudo vi. 에서 alias배쉬 문서의 섹션은 말한다 :

별명 값의 마지막 문자가 공백이면 별명 다음에 나오는 다음 명령 단어도 별명 확장을 점검합니다.

명령을 입력 한 후 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의 일부 배포판에서 루트에 대해 별칭이 지정되지 않았 음을 알 수 있습니다 .

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와 별칭을 갖는 멋진 트릭!
Corey Henderson

이것을 사랑하십시오-간단하고 우아합니다 !!! 이것이 정답입니다.
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/DIR 이것은 속임수를 썼는지 :sudo cp ~/.vimrc /root/


1

루트 사용자에게는 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에 ( "gui_running") 구문이
스콧 룬드그렌에게

-1

여전히 도움이 필요한 경우 다음 명령을 시도하십시오.

  • sudovi = which sudo vi
  • usrvi = which vi
  • 이 두 위치가 동일하면 계속하지 마십시오.

그렇지 않으면...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (기호 링크)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.