আমি কীভাবে জানব যে আমি vi কমান্ড থেকে শেলের মধ্যে আছি: sh?


9

Vi তে, আমি :shকমান্ড সহ শেল টার্মিনাল পেতে পারি । এবং পরে, আমি exitশেল দিয়ে vi তে ফিরে আসতে পারি ।

তবে, যদি আমি দীর্ঘদিন ধরে শেল টার্মিনালটি ব্যবহার করি এবং আমি কিছু ভুলে গিয়েছি exitবা আমাকে ফিরিয়ে দেবে কিনা তা ভুলে গিয়েছি ।

আমি vi তে ফিরে আসব কিনা তা যাচাই করার কোনও উপায় আছে কি? jobsবা fgকাজ করছে না।


3
ভিম যে পৃথক শেলটি শুরু করে এবং এতে ফিরে আসতে অক্ষম তা নিয়ে সমস্যার কারণে আমি বহু বছর আগে: sh কমান্ডটি ব্যবহার বন্ধ করে দিয়েছি। পরিবর্তে, আমি স্বাভাবিক শেলটিতে ফিরে আসার জন্য আমি Vimটিকে ব্যাকগ্রাউন্ডে (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আমার কাছে সবচেয়ে নির্ভরযোগ্য বলে মনে হচ্ছে (আপনার কাছে একটি ভিএমআরসি বা এমনকি ভিএম রানটাইম নাও থাকতে পারে)।

আপনি নিজের পরিবেশের ভেরিয়েবলগুলি সেট করতে পারেন:

: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

আমি আমার কমান্ড প্রম্পটটি একটি লাল শব্দের যোগ করার জন্য সেট করেছি যা "+ sh" একটি সাধারণ শেল সেশনের বিপরীতে চিহ্নিত হয় indicates এর মূল ভিত্তিটি হ'ল "$$" হ'ল বর্তমান প্রক্রিয়াটির পিড তাই:

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" বা অনুরূপ ব্যবহার করার জন্য বর্ণনা করেছি।

দ্রষ্টব্য : অন্য কোথাও বর্ণিত পরিবেশ পরিবর্তনশীল ($ ভিআইএম) পদ্ধতিটি এর চেয়ে ভাল বলে মনে হচ্ছে তবে আমি এটি রেখে যাব কারণ এটি যদি আপনি কোনও কিছুর শিশু প্রক্রিয়া (শুধু ভিএম নয়) সনাক্তকরণে কাজ করে works


1
উইম এটির শেলটির পরিবেশে তিনটি পরিবর্তনশীল রাখে :sh: এমওয়াইভিআইএমআরসি, ভিআইএম এবং ভিআইআরআরটিটাইম। আপনি ভিমের একটি সাব-শেল চালাচ্ছেন তা জানার জন্য আপনাকে যা যা করতে হবে তা হ'ল যে কোনওটির উপস্থিতির জন্য পরীক্ষা করা।
গ্যারিজোহান

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.