2012-03-27 14 views
5

w vim, typ : sh przełączy się powłoki, a wyjście może wyjść z powłoki i wrócić do vim. Czy jest jakieś polecenie sprawdzenia, czy jest w trybie powłoki vim? Żeby nie przypadkowo otworzyć ponownie tego samego pliku. Chcę uniknąć poniżej scenariusz:Jak sprawdzić, czy jest nadal w trybie powłoki Vima

vim myfile > :sh > exit > vim myfile // dostać ostrzeżenie od innego vim przykład edytuje ten sam plik

Są to normalny scenariusz:
vim myfile > :sh > exit // zachować edycji
vim myfile > :wq > vim myfile // zachować edycji

Odpowiedz

3

Oprócz @ a3nm odpowiedź, co można zrobić, to

  1. użycie pstree -h: będzie drzewo proces wyjścia z obecnego oddziału highligted i wszystko trzeba sprawdzić, czy nie ma w vim podświetleniem.
  2. Inną możliwością jest ps t: wyświetli wszystkie procesy za pomocą bieżącego terminala i powinien pokazać vim na liście, gdy jesteś w środku :sh. ps -oargs t może być bardziej przydatna, jeśli chcesz poznać argumenty, z którymi korzystałeś.

Te metody są bardziej wiarygodne, ponieważ zmienne VIMRUNTIME, VIM i MYVIMRC środowiska może być overrided przez Ciebie w tym celu pewne dostosowania (BTW, są one zdefiniowane przez vim do użytku w vimscripts, a nie przez :sh). Działają również w innych procesach, które umożliwiają uruchamianie podpowłoki, ale nie definiują żadnych zmiennych środowiskowych.

Proponuję również rozważyć użycie <C-z> w trybie normalnym lub :suspend/:stop w Ex, ponieważ zamiast używać nowego vim został uruchomiony interfejs vim powłoki. To zachowanie zapewnia dostęp do historii poleceń wpisanych przed uruchomieniem vima, a także umożliwia pisanie bardziej złożonej i czasochłonnej konfiguracji powłoki bez potrzeby oczekiwania za każdym razem.

W przypadku korzystania <C-z> obie metody nadal działać, ale pierwsza metoda nie będzie podkreślać vim, ponieważ będzie na tym samym poziomie (ma tego samego rodzica) jako pstree sam, prawdopodobnie tuż poniżej lub powyżej pstree na wykresie. To również umożliwia trzecią metodę: wbudowaną powłokę.

W celu przywrócenia z <C-z> należy użyć fg (pojedynczy % w zsh i bash działa również), który jest mniej wpisać następnie exit (ale więcej niż <C-d>).

3

Komenda :sh w vim zdaje się definiować zmienne środowiskowe VIMRUNTIME, VIM i MYVIMRC, więc można po prostu sprawdzić, czy są zdefiniowane. Aby to zrobić, możesz na przykład uruchomić echo $VIM, który powinien zwrócić pustą linię w normalnej powłoce i coś podobnego do /usr/share/vim w powłoce uruchamianej od vim.

Powiązane problemy