417 Stimmen

Wie kann ich ein Terminal innerhalb von Vim laufen lassen?

Ich bin an Emacs gewöhnt, aber ich probiere Vim aus, um zu sehen, welches Programm mir besser gefällt.

Eine Sache, die ich an Emacs mag, ist die Möglichkeit, ein Terminal innerhalb von Emacs laufen zu lassen. Ist dies innerhalb von Vim möglich? Ich weiß, dass man Befehle von Vim aus ausführen kann, aber ich würde gerne in der Lage sein, ein Terminal innerhalb einer Registerkarte laufen zu lassen.

20voto

Ich weiß, dass ich die Frage nicht direkt beantworte, aber ich denke, es ist ein guter Ansatz. Niemand hat tmux erwähnt (oder zumindest nicht als eigenständige Antwort). Tmux ist ein Terminal-Multiplexer wie Screen. Die meisten Dinge können in beiden Multiplexern gemacht werden, aber afaik ist tmux einfacher zu konfigurieren. Außerdem wird tmux zur Zeit aktiver entwickelt als Screen und es gibt ein ziemlich großes Ökosystem um ihn herum, wie z.B. Tools, die bei der der Konfiguration helfen, etc.

Auch für vim gibt es ein weiteres Plugin: ViMUX das ist sehr hilfreich bei der Interaktion zwischen den beiden Tools. Sie können Befehle mit aufrufen:

:call VimuxRunCommand("ls")

Dieser Befehl erzeugt eine kleine horizontale Trennung unterhalb des aktuellen Fensters vim ist.

Es kann auch von einer Eingabeaufforderung aus ausgeführt werden, falls Sie nicht das ganzen Befehl ausführen wollen:

<Leader>vp :VimuxPromptCommand<CR>

Als wäre das nicht genug, gibt es noch mindestens 6 "plattformspezifische Plugins":

  • vim-vroom runner für rspec, cucumber und test/unit; vimux-Unterstützung über g:vroom_use_vimux
  • vimux-ruby-test : eine Reihe von Befehlen zur einfachen Durchführung von Ruby-Tests
  • vimux-Gurke : Cucumber-Funktionen durch Vimux ausführen
  • vim-turbux : Turbo-Ruby-Tests mit tmux
  • vimux-pyutils : Eine Reihe von Funktionen für vimux, die es erlauben, Codeblöcke in ipython auszuführen
  • vimux-nose-test : Nasentests in vimux ausführen

Hier ist ein schöner "Anwendungsfall": Tests bei Bedarf mit Vimux und Turbux mit Spork und Guard

16voto

Sam Punkte 377

Es ist möglich, einen neuen Tab mit einem Terminal in vim seit 2017 zu öffnen, wie @fjardon sagte:

Tippen Sie einfach: :terminal . Es wird standardmäßig eine Registerkarte über Ihrer aktuellen Registerkarte geöffnet.

Wenn Sie möchten, dass sie an einem anderen Ort geöffnet wird, können Sie folgende Optionen ausprobieren:

  • :below terminal : Öffnen Sie das Terminal unter der aktuellen Registerkarte.
  • :below vertical terminal : Öffnen Sie das Terminal immer senkrecht nach rechts.

Sie können damit spielen, bis Sie das finden, was Ihnen gefällt. Danach können Sie eine Karte in Ihrem .vimrc Konfigurationsdatei, für mich, verwende ich:

nmap <leader>tt :below vertical terminal<CR>

Auf diese Weise kann ich tippen <space>tt (Leertaste, mein Führungsschlüssel), um ihn schnell zu öffnen.

Nebenbei bemerkt:

  • Sie können zwischen Ihren Tabs (Terminal und anderen Puffern) wechseln mit Ctrl + W Ctrl + W .
  • Sie können einen editierbaren Modus in Ihrem Terminal aufrufen, wenn Sie Ihre Befehle mit Ctrl + W N und wechseln Sie in den normalen Terminalmodus mit i ou a .

Zum Wohl!

14voto

user3751385 Punkte 3031

Jemand hat bereits vorgeschlagen https://github.com/Shougo/vimshell.vim aber sie haben nicht erwähnt, warum. Folglich habe ich nach dieser Frage viel Zeit damit vergeudet, die anderen (viel höher eingestuften) Optionen auszuprobieren.

Shougo/vimshell ist die Antwort. Hier ist der Grund dafür:

VimShell ist nicht nur ein Terminal-Emulator, sondern ermöglicht Ihnen auch die Navigation durch die Terminalausgabe im normalen und visuellen Modus. Wenn also ein von Ihnen ausgeführter Befehl zu einer Ausgabe führt, die Sie nur mit der Tastatur kopieren und einfügen möchten... VimShell deckt dies ab.

Keine der anderen genannten Optionen, einschließlich des :terminal-Befehls in NeoVim, tun dies. NeoVims :terminal kommt dem nahe, ist aber zumindest in den folgenden Punkten unzureichend Stand: 18.2.2017:

  • Bewegt den Cursor an das Ende des Puffers, anstatt ihn am Ende an der gleichen Stelle zu halten, wie es VimShell tut. Enorme Zeitverschwendung.

  • Unterstützt nicht modifiable = 1 siehe eine Diskussion darüber auf Github , so dass hilfreiche Plugins wie vim-easymotion nicht verwendet werden können.

  • Unterstützt nicht die Anzeige von Zeilennummern wie Vimshell.

Verschwenden Sie keine Zeit mit den anderen Optionen, einschließlich Neovims :terminal. Wählen Sie VimShell.

9voto

Eric Schwabe Punkte 99

Sie sollten einen Blick auf die :sh Befehl (siehe :help sh in Vim).

Verschiedene Befehle

7voto

Amber Punkte 473552

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X