Vi komutundan bir kabukta olduğumu nasıl bilebilirim: sh?


9

VI'da :shkomutla bir kabuk terminali alabilirim . Ve daha sonra vi'ye exitkabukla dönebilirim .

Ancak, eğer kabuk terminalini uzun süre kullanıyorsam ve exitherhangi bir şeyi kapatıp kapamayacağımı ya da vi'yı geri getirip getirmeyeceğini unuttum .

Vi'ya dönüp dönmeyeceğimi kontrol etmenin herhangi bir yolu var mı? jobsveya fgçalışmıyor.


3
Vim'in başlattığı ayrı kabuk ve ona geri dönememe sorunları nedeniyle yıllar önce: sh komutunu kullanmayı bıraktım. Bunun yerine, normal kabuğa geri dönmek için Vim'i arka plana (ctrl-z) koymaya başladım. Bash iş kontrol işlevlerini kullanarak normal kabuktan Vim'e geri dönmek kolaydır.
bsnyder

Yanıtlar:


8

Normal bir kabukta:

$ env | grep -i vim
EDITOR=vim

Kullandıktan sonra :shell

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

Vim setleri gibi Öyle görünüyor VIMRUNTIME, VIMve MYVIMRCçevre değişkenleri. Bunlardan, VIMbenim için en güvenilir görünüyor (bir vimrc veya vim çalışma zamanınız olmayabilir).

Ayrıca kendi ortam değişkenlerinizi de ayarlayabilirsiniz:

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

Bu özellikle düzenlediğiniz arabellek hakkında bilgi vermek için kullanışlıdır; Örneğin:

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

Gibi bir şey olarak görünecek:

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

3

Benim komut istemi normal bir kabuk oturumu yerine bir vim ": sh" olup olmadığını gösteren kırmızı bir "+" sembolü eklemek için ayarlanmış var. Bunun temel taşı, "$$" un mevcut sürecin pid olmasıdır:

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.

Bunu yaptıktan sonra kolayca "in.

Not : Başka bir yerde açıklanan ortam değişkeni ($ VIM) yöntemi bundan daha iyi görünüyor, ancak herhangi bir şeyin (sadece vim değil) bir alt süreci olup olmadığınızı belirlemeye çalışırken bunu bırakacağım.


1
Vim, lauched olduğu kabuğun ortamına üç değişken koyar :sh: MYVIMRC, VIM ve VIMRUNTIME. Vim'in bir alt kabuğunda koştuğunuzu bilmek için yapmanız gereken tek şey, bunların herhangi birinin varlığını test etmektir.
Garyjohn

2

Yürütün psya da daha iyisi ps -fH. Ör:

$ 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 -fHSadece üzerinde kullanmanın avantajı ps, bir alt kabukta olup vimolmadığınızı veya vimarka plana koyduğunuzu görmenizi sağlamasıdır . Bu durumda ps -fHşöyle görünecektir:

$ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.