मुझे कैसे पता चलेगा कि मैं vi कमांड से शेल में हूं: श?


9

Vi में, मुझे :shकमांड के साथ एक शेल टर्मिनल मिल सकता है । और बाद में, मैं वीआई को exitशेल द्वारा वापस कर सकता हूं ।

लेकिन, अगर मैं लंबे समय तक शेल टर्मिनल का उपयोग कर रहा था, और मैं भूल गया कि क्या exitकुछ बंद होगा या मुझे vi वापस करेगा।

क्या यह जांचने का कोई तरीका है कि क्या मैं vi पर वापस लौटूंगा? jobsया fgकाम नहीं कर रहा है।


3
मैंने अलग शेल के साथ मुद्दों के कारण कई वर्षों पहले sh: कमांड का उपयोग करना बंद कर दिया था, जो कि विम शुरू होता है और इसमें वापस आने में असमर्थता होती है। इसके बजाय, मैंने विम को बैकग्राउंड में वापस लाने के लिए बैकग्राउंड (ctrl-z) में डालना शुरू किया। बैश जॉब कंट्रोल फ़ंक्शंस का उपयोग करके सामान्य शेल से विम पर वापस जाना आसान है।
bsnyder

जवाबों:


8

एक नियमित शेल में:

$ env | grep -i vim
EDITOR=vim

उपयोग करने के बाद :shell

$ env | grep -i vim
EDITOR=vim
VIMRUNTIME=/usr/share/vim/vim80
VIM=/usr/share/vim
MYVIMRC=/home/martin/.vim/vimrc

तो ऐसा लगता है कि विम सेट की तरह VIMRUNTIME, VIMहै, और MYVIMRCवातावरण चर। उनमें से, VIMमेरे लिए सबसे अधिक विश्वसनीय लगता है (आपके पास vimrc या vim रनटाइम नहीं हो सकता है)।

आप अपने स्वयं के पर्यावरण चर भी सेट कर सकते हैं:

:let $HELLO = "test"
:shell
$ echo $HELLO
test

यह आपके द्वारा संपादित किए जा रहे बफर के बारे में जानकारी संप्रेषित करने के लिए विशेष रूप से उपयोगी है; उदाहरण के लिए:

:let $VIM_FILETYPE = &filetype
:let $VIM_FILENAME = expand('%:p')

कुछ इस तरह दिखाएगा:

VIM_FILETYPE=go
VIM_FILENAME=/home/martin/a.go

3

मेरे पास एक लाल "+" प्रतीक जोड़ने के लिए मेरी कमांड प्रॉम्प्ट है जो इंगित करता है कि क्या मैं एक विम में हूं: "" एक सामान्य शेल सत्र के विपरीत। इसकी आधारशिला यह है कि "$ $" मौजूदा प्रक्रिया का मार्ग है:

MY_PPID=$(ps --no-header -o ppid -p $$)          # Gets the pid of the parent
                                                 # process.
MY_PCMDLINE=$(ps --no-header -o cmd -p $MY_PPID) # Gets its command line.
MY_CMDDASH=$(awk '{print $1}' <<<$MY_PCMDLINE)   # Gets the command name, possibly
                                                 # with a preceding hyphen.
MY_CMD=${MY_CMDDASH#-}                           # Get the bare command name.

एक बार आपके पास यह होने पर आप आसानी से इनलाइन और कुछ का निर्माण कर सकते हैं जैसे कि मैंने आपके ".bashrc" या इसी तरह के उपयोग के लिए वर्णित किया है।

नोट : पर्यावरण चर ($ VIM) विधि कहीं और वर्णित इस से बेहतर लगती है, लेकिन मैं इसे छोड़ दूंगा क्योंकि यह पहचानने में काम आता है कि क्या आप किसी भी चीज़ की बाल प्रक्रिया है (सिर्फ विम नहीं)।


1
विम ने शेल के वातावरण में तीन वैरिएबल :shलगाए हैं जो इसके साथ प्रशंसा करते हैं : MYVIMRC, VIM और VIMRUNTIME। आपको केवल यह जानना है कि आप विम के उप-शेल में चल रहे हैं, उनमें से किसी की उपस्थिति के लिए परीक्षण करना है।
गैरीजोन

2

निष्पादित करें ps, या बेहतर ps -fH,। उदाहरण के लिए:

$ ps -fH
UID        PID  PPID  C STIME TTY          TIME CMD
garyjohn 31140 31139  0 10:26 pts/11   00:00:00 bash
garyjohn 31267 31140  2 10:26 pts/11   00:00:00   vim hello.txt
garyjohn 31271 31267  0 10:26 pts/11   00:00:00     /bin/bash
garyjohn 31332 31271  0 10:26 pts/11   00:00:00       ps -fH

ps -fHबस psका उपयोग करने का लाभ यह है कि यह आपको यह देखने देता है कि क्या आप उप-शेल में हैं vimया यदि आप vimपृष्ठभूमि में हैं। उस मामले में, ps -fHइस तरह दिखेगा:

$ ps -fH
UID        PID  PPID  C STIME TTY          TIME CMD
garyjohn 31140 31139  0 10:26 pts/11   00:00:00 bash
garyjohn 31267 31140  0 10:26 pts/11   00:00:00   vim hello.txt
garyjohn 31924 31140  0 10:29 pts/11   00:00:00   ps -fH
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.