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

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


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?


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.


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

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/


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.


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 ....


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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.