ทำไมฉันไม่มีการเน้นไวยากรณ์เมื่อฉัน sudo vi <filename>


27

ฉันไม่เข้าใจวิธีการอนุญาตให้เน้นไวยากรณ์ในไฟล์ที่ฉันแก้ไขผ่านviเมื่อใช้ sudo เมื่อฉันsudo vi <filename>เทอร์มินัลเป็นเพียงขาวดำของการตั้งค่าเทอร์มินัลของฉัน ใน vi หากฉันป้อน:syntax onการเปลี่ยนแปลงใด ๆ

เมื่อฉันvi <filename>ไวยากรณ์ทั้งหมดเป็นสีที่เหมาะสม ใช้ RHEL 5.4, env ที่เกี่ยวข้อง:

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 น่าจะเป็นไปได้มากที่สุด คุณอาจไม่ต้องการเปลี่ยนบัญชีรูทของคุณเป็นวีไออย่างถาวรเพราะทรัพยากรของคุณในระดับต่ำนั้นเกือบจะรับประกันว่าจะทำงานได้ตลอดเวลาฉันไม่แน่ใจเกี่ยวกับ vim

คุณอาจใช้ (สี)

/usr/bin/vim 

ภายใต้ผู้ใช้ปกติของคุณและ

/bin/vi

ภายใต้ sudo หรือ root คุณสามารถตรวจสอบโดยใช้:

which vi

ภายใต้ผู้ใช้ปกติของคุณและอีกคนหนึ่งผ่าน sudo

sudo which vi

ทำ

man which 

หากคุณต้องการรายละเอียดเพิ่มเติม


ฉันไม่ได้เปลี่ยนบัญชีรูทเพื่อใช้เป็นกลุ่ม แต่แค่รู้ว่าสิ่งใดที่แสดงให้เห็นว่า vi ถูกใช้แทนกลุ่มในขณะที่ผู้ใช้ของฉันบอกให้ฉันใช้ sudo vim <file> แทนที่จะเป็น sudo vi <file>
Scott Lundgren

17

บนระบบ RHEL /bin/viโดยทั่วไปแล้วจะเป็นรุ่นที่เล็กที่สุดvimโดยไม่มีการเน้นไวยากรณ์ใด ๆ /usr/bin/vimเป็นบรรณาธิการที่มีคุณสมบัติครบถ้วน มันเป็นไปได้มากว่าในสภาพแวดล้อมของผู้ใช้ของคุณเป็นนามแฝงสำหรับvi vimลองสิ่งนี้:

sudo vim /some/file

คุณได้เน้นไวยากรณ์ตอนนี้หรือไม่


ใช่ และดูเหมือนว่าคำตอบของ sinping คือสิ่งที่ฉันต้องการเพื่อให้ได้พฤติกรรมที่ฉันต้องการ
Scott Lundgren

11

คุณviอาจ/bin/viมาจากแพ็คเกจvim-minimalที่ไม่รองรับการเน้นไวยากรณ์ sudo viเปิดตัว/bin/viสำหรับคุณ

Bash จะทำการขยายนามแฝงกับคำแรกในบรรทัดคำสั่งของคุณดังนั้นใน:

sudo vi

viจะไม่ถูกแทนที่vimแม้ว่าคุณจะกำหนดนามแฝงนั้นแล้วก็ตาม

วิธีแก้ไขคือกำหนดนามแฝงอื่น (สำหรับผู้ใช้ที่เรียกใช้sudo):

alias sudo = 'sudo'

sudoหมายเหตุช่องว่างหลังที่สอง

ใช้นี้sudoทุบตีจะทำการขยายตัวนามแฝงสำหรับในvi sudo viในaliasส่วนของ Bash 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ได้ว่าไม่ได้ใช้นามแฝงสำหรับรูทใน distros ใน /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!
คอเรย์เฮนเดอร์สัน

รักสิ่งนี้ - เรียบง่ายและสง่างาม !!! นี่คือคำตอบที่ถูกต้อง
FilmJ

3

โดยค่าเริ่มต้นใน 5.4 vi เป็นค่าเริ่มต้น ฉันลืมรุ่นที่เริ่มต้นด้วยนี่จะเพิ่มชื่อแทนที่จำเป็นสำหรับคุณ:

cat <<_EOF >>/root/.bashrc

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

2

ผมพบว่าในรุ่นของฉันเป็นกลุ่ม (ติดตั้งsudo apt-get install vimในเดเบียน 7) คำสั่งที่ถูกกำหนดบนพื้นฐานต่อผู้ใช้ในsyntax on ~/.vimrcอย่างไรก็ตามโดยค่าเริ่มต้นการติดตั้งไม่ได้สร้าง/root/.vimrcไฟล์สำหรับsudo viการโหลด ดังนั้นฉันเพิ่งคัดลอก~/.vimrcลงใน/root/dir และสิ่งนี้ได้หลอกลวง:sudo cp ~/.vimrc /root/


1

นี่เป็นเพราะผู้ใช้รูทของคุณไม่มีไฟล์คอนฟิกูเรชันเป็นกลุ่ม ดังนั้นเพียงคัดลอกไฟล์กำหนดค่าผู้ใช้มาตรฐานของคุณไปยังไดเรกทอรีราก

sudo cp -r ~/.vi* /root/ อะไรแบบนั้น.

nb: ตรวจสอบว่าคุณยังไม่ได้ไฟล์สอดคล้องกับ~/vi*ที่ไม่เป็นกลุ่ม


0

1) ตรวจสอบว่าคุณใช้ vim จริง ๆ หรือไม่ไม่ใช่ vi (ซึ่งเป็นค่าเริ่มต้นบนระบบที่ติดตั้งใหม่)

2) ตรวจสอบว่าคุณ/etc/vim/vimrcมีสายsyntax on

3) ไม่ใช่ไฟล์ทุกชนิดที่มีข้อมูลการเน้นไวยากรณ์อยู่โดยค่าเริ่มต้น


ไม่มี / etc / vim / vimrc แต่ / etc / vimrc มีการเน้นไวยากรณ์โดยค่าเริ่มต้น: if & t_Co> 2 | | มีไวยากรณ์ ("gui_running") บน set hlsearch endif
Scott Lundgren

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