जब मैं sudo vi <filename> करता हूं तो मुझे सिंटैक्स हाइलाइटिंग क्यों नहीं आती है?


27

मुझे समझ नहीं आता कि कैसे मैं संपादन कर रहा हूँ के माध्यम से फाइलों में वाक्य रचना हाइलाइटिंग अनुमति देने के लिए vi जब sudo का उपयोग कर। जब मैं sudo vi <filename>टर्मिनल अपने टर्मिनल सेटिंग्स का केवल काला और सफेद होता हूं। Vi में अगर मैं :syntax onकुछ भी नहीं बदलता हूं ।

जब मैं vi <filename>सभी वाक्यविन्यास ठीक से रंगीन हो। आरएचईएल 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या समान है।
क्रिस एस

जवाबों:


26

Larks उत्तर शायद सबसे अधिक संभावना है। आप अपने रूट खातों vi को स्थायी रूप से विम में बदलने की इच्छा नहीं कर सकते हैं जैसे कि आपके संसाधन कम vi हमेशा काम करने की गारंटी है, मैं विम के बारे में इतना निश्चित नहीं हूं।

आप शायद (रंग) का उपयोग कर रहे हैं

/usr/bin/vim 

अपने सामान्य उपयोगकर्ता के तहत और

/bin/vi

सूडो या जड़ के नीचे। आप का उपयोग करके देख सकते हैं:

which vi

एक बार अपने सामान्य उपयोगकर्ता के तहत और दूसरा sudo के माध्यम से

sudo which vi

ए करें

man which 

यदि आपको अधिक जानकारी चाहिए


मैंने vim का उपयोग करने के लिए रूट खाता नहीं बदला, लेकिन यह जानते हुए भी कि vi ने दिखाया कि vim को विस्मयादिबोधक किया गया था क्योंकि मेरे उपयोगकर्ता ने मुझे sudo vim <file> के बजाय sudo vim <file> का उपयोग करने के लिए कहा था
स्कॉट लुंडग्रेन

17

आरएचईएल प्रणाली पर, /bin/viआमतौर पर vimकिसी सिंटैक्स हाइलाइटिंग समर्थन के बिना, का एक न्यूनतम संस्करण है । /usr/bin/vimपूर्ण विशेषताओं वाला संपादक है। यह बहुत संभावना है कि आपके उपयोगकर्ता वातावरण में, के viलिए एक उपनाम है vim। इसे इस्तेमाल करे:

sudo vim /some/file

क्या अब आपको वाक्य रचना हाइलाइटिंग आती है?


हाँ! और ऐसा लगता है कि मैं जिस व्यवहार को चाहता था, उसे पाने के लिए पापिंग का जवाब था
स्कॉट लुंडग्रेन

11

आपका viशायद /bin/viपैकेज से है vim-minimalजो सिंटैक्स हाइलाइटिंग का समर्थन नहीं करता है। आपके लिए sudo viलॉन्च /bin/viकिया गया।

बैश केवल आपकी कमांड लाइन में पहले शब्द पर उर्फ ​​विस्तार करता है, इसलिए:

sudo vi

vivimभले ही आप उर्फ ​​परिभाषित किया गया हो , तब भी प्रतिस्थापित नहीं किया जाता है।

समाधान एक अन्य उपनाम (उपयोगकर्ता को आमंत्रित करने के लिए sudo) परिभाषित किया गया है :

उर्फ सुडो = 'सुडो'

दूसरे के बाद अंतरिक्ष पर ध्यान दें sudo

इस का उपयोग करते हुए sudo, पार्टी के लिए उर्फ विस्तार करना होगा viमें sudo vialiasबाश डॉक्टर के अनुभाग में यह कहा गया है:

यदि उपनाम के मान का अंतिम वर्ण रिक्त है, तो उपनाम के बाद अगला कमांड शब्द भी उपनाम के विस्तार के लिए जांचा जाता है।

आप अपने आदेश दर्ज करने के बाद, आप भी दबा सकते हैं Ctrl+ Alt+ Eमें bashविस्तार परिणाम देखने के लिए।

क्रेडिट:

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

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


सीधे शब्दों में aliasing 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

इसे बदलने से समस्या का समाधान नहीं होगा।


भयानक चाल सूदियो के साथ एलियास की है!
कोरी हेंडरसन

यह प्यार - सरल और सुरुचिपूर्ण !!! यह सही जवाब है।
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/और इसने यह चाल चली:sudo cp ~/.vimrc /root/


1

ऐसा इसलिए है क्योंकि आपके रूट उपयोगकर्ता के पास vim कॉन्फ़िगरेशन फ़ाइल नहीं है। तो बस अपने मानक उपयोगकर्ता vim कॉन्फ़िगरेशन फ़ाइल को रूट निर्देशिका में कॉपी करें।

sudo cp -r ~/.vi* /root/ ऐसा कुछ।

nb: जाँच करें कि क्या आपने ~/vi*वो पत्र नहीं भेजा है जो विम के लिए नहीं है।


0

1) जांचें कि क्या आप वास्तव में विम का उपयोग कर रहे हैं और vi (जो दुर्भाग्य से ताजा स्थापित सिस्टम पर अक्सर डिफ़ॉल्ट होता है)

2) जांचें कि आपकी /etc/vim/vimrcलाइन हैsyntax on

3) सभी प्रकार की फाइलों में डिफ़ॉल्ट रूप से सिंटैक्स-हाइलाइटिंग जानकारी उपलब्ध नहीं है…।


कोई / etc / vim / vimrc नहीं था, लेकिन / etc / vimrc में डिफ़ॉल्ट रूप से हाइलाइटिंग सिंटैक्स था: if & t_Co> 2 || है ("gui_running") सिंटैक्स ऑन सेट hlsearch endif
स्कॉट लुंडग्रेन

-1

उन लोगों के लिए जो अभी भी मदद की तलाश में हैं, इन आदेशों को आज़माएँ।

  • sudovi = which sudo vi
  • usrvi = which vi
  • यदि ये दोनों स्थान समान हैं, तो जारी न रखें।

अन्यथा...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (प्रतीकात्मक लिंक)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.