Mengapa saya tidak memiliki penyorotan sintaks ketika saya sudo vi <nama file>?

27

Saya tidak mengerti bagaimana membolehkan penyorotan sintaks pada file yang saya edit melalui vi saat menggunakan sudo. Ketika saya sudo vi <filename>terminal hanya hitam & putih dari pengaturan terminal saya. In vi jika saya memasukkan :syntax onperubahan.

Ketika saya vi <filename>semua sintaks berwarna dengan benar. Menggunakan RHEL 5.4, id yang relevan:

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
Scott Lundgren
sumber
3
vitidak mendukung warna, jadi apa pun yang menunjukkan warna sedang berjalan vimatau serupa.
Chris S

Jawaban:

26

Larks jawaban mungkin yang paling mungkin. Anda mungkin tidak ingin mengubah akun root Anda vi ke vim secara permanen karena jika sumber daya Anda rendah vi hampir dijamin untuk selalu bekerja, saya tidak begitu yakin tentang vim.

Anda mungkin menggunakan (warna)

/usr/bin/vim 

di bawah pengguna normal Anda dan

/bin/vi

di bawah sudo atau root. Anda dapat memeriksa dengan menggunakan:

which vi

sekali di bawah pengguna normal Anda dan yang lainnya via sudo

sudo which vi

Lakukan a

man which 

jika Anda membutuhkan detail lebih lanjut

pengguna63673
sumber
Saya tidak mengubah akun root untuk menggunakan vim tetapi hanya mengetahui apa yang menunjukkan bahwa vi telah diubah menjadi vim karena pengguna saya mengatakan kepada saya untuk menggunakan sudo vim <file> alih-alih sudo vi <file>
Scott Lundgren
17

Pada sistem RHEL, /bin/vibiasanya versi minimal vim, tanpa dukungan penyorotan sintaksis. /usr/bin/vimadalah editor berfitur lengkap. Sangat mungkin bahwa di lingkungan pengguna Anda, viadalah alias untuk vim. Coba ini:

sudo vim /some/file

Apakah Anda mendapatkan penyorotan sintaksis sekarang?

larsks
sumber
Iya nih! dan sepertinya jawaban sinping adalah yang saya butuhkan untuk mendapatkan perilaku yang saya inginkan
Scott Lundgren
11

Anda vimungkin /bin/vidari paket vim-minimalyang tidak mendukung penyorotan sintaksis. sudo vidiluncurkan /bin/viuntuk Anda.

Bash hanya melakukan ekspansi alias pada kata pertama di baris perintah Anda, jadi di:

sudo vi

vitidak diganti vimbahkan jika Anda memiliki alias yang ditetapkan.

Solusinya adalah mendefinisikan alias lain (untuk pengguna yang memohon sudo):

alias sudo = 'sudo'

Perhatikan spasi setelah yang kedua sudo.

Dengan ini sudo, bash akan melakukan ekspansi alias untuk vidi sudo vi. Di aliasbagian Bash doc tertulis:

Jika karakter terakhir dari nilai alias adalah kosong, maka kata perintah berikutnya setelah alias juga diperiksa untuk ekspansi alias.

Setelah Anda memasukkan perintah Anda, Anda dapat menekan Ctrl+ Alt+ Edi bashuntuk melihat hasil ekspansi.

Kredit:

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

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


Cukup aliasing vidi /root/.bashrctidak akan bekerja.

Dapat juga dicatat bahwa vitidak di alias untuk root pada beberapa distro di /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

Mengubah ini juga tidak akan menyelesaikan masalah.

Monitor Ikan
sumber
Trik yang luar biasa untuk memiliki alias dengan sudo!
Corey Henderson
Suka ini - sederhana dan elegan !!! Ini jawaban yang benar.
FilmJ
3

Secara default di 5.4 vi adalah default. Saya lupa versi apa yang dimulai. Ini akan menambahkan alias yang diperlukan untuk Anda:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
berdosa
sumber
2

saya menemukan bahwa dalam versi vim saya (instal dengan sudo apt-get install vimpada debian 7) syntax onperintah didefinisikan pada basis per pengguna di ~/.vimrc. namun secara default instal tidak membuat /root/.vimrcfile untuk sudo vidimuat. jadi saya hanya menyalin ~/.vimrcke /root/dir dan ini berhasil:sudo cp ~/.vimrc /root/

mulllhausen
sumber
1

Ini karena pengguna root Anda tidak memiliki file konfigurasi vim. jadi cukup salin file konfigurasi vim pengguna standar Anda ke direktori root.

sudo cp -r ~/.vi* /root/ sesuatu seperti itu.

nb: periksa apakah Anda belum mengajukan korespondensi ~/vi*yang bukan untuk vim.

Léo Derbois
sumber
0

1) Periksa apakah Anda benar-benar menggunakan vim dan bukan vi (yang sayangnya sering default pada sistem yang baru diinstal)

2) Periksa apakah Anda /etc/vim/vimrcmemiliki garissyntax on

3) Tidak semua jenis file memiliki info penyorotan sintaks yang tersedia secara default ....

tsg
sumber
Tidak ada / etc / vim / vimrc, tetapi / etc / vimrc memang memiliki penyorotan sintaks secara default: if & t_Co> 2 || memiliki sintaks ("gui_running") di set hlsearch endif
Scott Lundgren
-1

Bagi yang masih mencari bantuan, coba perintah ini.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Jika kedua lokasi ini sama, maka jangan lanjutkan.

Jika tidak...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (tautan simbolik)
Keenan Thompson
sumber