/ / Uruchom skrypty PowerShell w emacsie - Windows, PowerShell, Vim, Emacs, cmd

Uruchom skrypty powershell w emacs - windows, powershell, vim, emacs, cmd

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 № 1

W 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.