GNU/Linux >> Belajar Linux >  >> Linux

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

Solusi 1:

Jawaban Larks mungkin yang paling mungkin. Anda mungkin tidak ingin mengubah akun root Anda vi ke vim secara permanen seolah-olah sumber daya Anda rendah vi hampir dijamin untuk selalu berfungsi, 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 melalui sudo

sudo which vi

Lakukan a

man which 

jika Anda memerlukan detail lebih lanjut

Solusi 2:

Pada sistem RHEL, /bin/vi biasanya merupakan versi minimal dari vim , tanpa dukungan penyorotan sintaks apa pun. /usr/bin/vim adalah editor berfitur lengkap. Sangat mungkin di lingkungan pengguna Anda, vi adalah alias untuk vim . Coba ini:

sudo vim /some/file

Apakah Anda mendapatkan penyorotan sintaks sekarang?

Solusi 3:

vi Anda mungkin adalah /bin/vi dari paket vim-minimal yang tidak mendukung penyorotan sintaks. sudo vi meluncurkan /bin/vi untukmu.

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

sudo vi

vi tidak diganti dengan vim bahkan jika Anda telah menentukan alias tersebut.

Solusinya mendefinisikan alias lain (untuk pengguna yang memanggil sudo ):

alias sudo='sudo '

Perhatikan spasi setelah sudo kedua .

Menggunakan sudo ini , bash akan melakukan ekspansi alias untuk vi di sudo vi . Di alias bagian dari Bash doc tertulis:

Jika karakter terakhir dari nilai alias adalah kosong, maka kata perintah selanjutnya yang mengikuti alias juga diperiksa untuk perluasan alias.

Setelah Anda memasukkan perintah, Anda dapat menekan Ctrl +Alt +E di bash untuk melihat hasil perluasan.

Kredit:

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

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

Cukup aliasing vi di /root/.bashrc tidak akan berfungsi.

Perlu dicatat juga bahwa vi tidak memiliki 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.

Solusi 4:

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

cat <<_EOF >>/root/.bashrc

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

Solusi 5:

saya menemukan itu di versi vim saya (instal dengan sudo apt-get install vim pada debian 7) syntax on perintah didefinisikan berdasarkan per pengguna di ~/.vimrc . namun secara default penginstalan tidak membuat /root/.vimrc untuk sudo vi untuk memuat. jadi saya hanya menyalin ~/.vimrc ke dalam /root/ dir dan ini berhasil:sudo cp ~/.vimrc /root/


Linux
  1. Tambahkan pengguna ke grup tetapi tidak tercermin saat menjalankan id

  2. perintah tidak ditemukan saat menggunakan sudo

  3. Mengapa sistem saya hanya menampilkan RAM 3,2 GiB padahal saya pasti memiliki 4,0 GiB

  1. Mengapa Variabel Path Berbeda Saat Menjalankan Via Sudo Dan Su?

  2. Mengapa tidak memblokir ICMP?

  3. perintah linux ditemukan tetapi tidak ditemukan saat menggunakan sudo

  1. Mengapa Nullglob Tidak Default?

  2. .bash_profile Tidak Bersumber Saat Menjalankan Su?

  3. Linux – Mengapa Usb Tidak Berfungsi Di Linux Saat Berfungsi Di UEFA/bios?