Zainstalowałem pakiet PowerShell w emacsie. Uruchomiłem PowerShell za pomocą M-X PowerShell. W oknie PowerShell jestem w stanie uruchamiać polecenia takie jak ls itp., Ale nie jestem w stanie wykonywać skryptów PowerShell. Próbowałem użyć cmd jako domyślnej powłoki w emacsie i wykonać z niej skrypt PowerShell, jak opisano tutaj;
Jak uruchomić PowerShell w CMD
ale się zawiesza. Podobnie, kiedy próbuję uruchomić vima w PowerShell / cmd w emacs, zawiesza się. Chcę zauważyć, że skrypty i vim działają dobrze w PowerShell i cmd, jeśli uruchamiam je poza emacsem.
Odpowiedzi:
1 dla odpowiedzi № 1W M-x powershell
i M-x shell
, terminal jest „głupi” i rozumie to tylko programy wydrukować, ale nie programy, które działają pełny ekran.
Więc to będzie działać ls
, cat
, i cd
, ale zawiedzie vim
, man
, i less
. Założę się, że twój skrypt próbuje się otworzyć vim
, nie?
To ograniczenie istnieje z jakiegoś powodu: gdy program przechodzi w tryb pełnoekranowy, przechwytuje wszystkie dane z klawiatury. Więc jeśli otworzysz vim
i typ C-x
, czy uruchamia polecenie Emacs dla C-x
lub polecenie Vima? Jeśli zawsze uruchamiasz komendę Emacs, oznacza to, że podczas pisania j
, wstawi się j
do bufora Emacsa zamiast przewijania w Vimie. Vim stanie się bezużyteczny. Jeśli zawsze uruchamiasz polecenie Vima, oznacza to, że nie możesz już używać C-x C-c
aby wydostać się z Emacsa, ponieważ polecenie zostanie wchłonięte przez Vima.
Jedno obejście to użycie M-x term
. W term
wszystkie naciśnięcia klawiszy są wysyłane do programu, więc możesz otworzyć i używać Vima jak zwykle. Aby uruchomić polecenie Emacsa, zacznij od C-c
. Możesz przeczytać więcej na ten temat tutaj. Nie jestem pewien, czy istnieje w systemie Windows.
Kolejne obejście do użycia emacsclient
:
;; in init.el
(server-start)
# in a shell
$ emacsclient file.txt
Spowoduje to otwarcie pliku w istniejącym oknie Emacsa. Po zakończeniu edycji pliku naciśnij C-x #
wrócić do powłoki.