2017-12-16 1 views
2

In meiner .vimrc Datei Ich habe Senden Eingang die folgende Zeile enthält:zu Embedded Terminal in vim

autocmd vimenter * botright term 

Das bedeutet, dass, wann immer Vim startet, wird es einen Terminal an den rechten unteren öffnen. Ich möchte eine Schlüsselzuordnung erstellen, die vim einen gegebenen, dynamisch generierten Befehl am Terminal ausführen lässt. Zum Beispiel habe ich die folgenden meiner .vimrc Datei hinzugefügt:

nmap <leader><leader> <C-w><C-w>python my_python_file.py<CR><C-w><C-w> 

Also, wenn ich eine Datei bin der Bearbeitung my_py_file.py, genannt kann ich drücken <leader><leader> und Vim erste Fenster ändern (Wechsel in den Embedded-Terminal) und geben Sie der Befehl

python my_python_file.py 

so, dass die Datei in python laufen wird, und schließlich zurück in das andere Fenster ändern, damit ich weiter bearbeiten kann. Das funktioniert! Aber ich möchte, dass es für beliebige Dateien funktioniert, nicht nur für Dateien mit dem Namen my_python_file.py. Wie kann dies erreicht werden?

Ich habe über die Verwendung von expand('%:p') gedacht, um den vollständigen Pfad der aktuellen Datei zu erhalten, aber ich konnte diese Zeichenfolge nicht als Eingabe an das eingebettete Terminalfenster übergeben. Ich habe versucht, eine Funktion zu schreiben, um dies zu erreichen, aber ohne Erfolg.

+1

Haben Sie 'term_sendkeys()' untersucht? Das könnte erreichen, was Sie wollen. Wenn Sie eine Lösung finden, posten Sie sie als Antwort, das interessiert mich auch. – L3viathan

Antwort

0

Der Schlüssel ist, map <expr> <leader><leader> ... zu verwenden, damit <leader><leader> einer dynamisch generierten Bindung zugeordnet werden kann. Der folgende Code-Schnipsel aus einer .vimrc Datei arbeitet mit Vim 8.0:

" open a terminal directly below current window 
nnoremap <leader>t :split<cr><c-w><c-j>:terminal ++curwin<cr><c-w><c-k> 
" save current file and run python on it in terminal window directly below 
nnoremap <expr> <leader><leader> ':w<cr><c-w><c-j>python ' . expand('%:p') . '<cr><c-w><c-k>' 

Diese <leader>t ordnen einen neuen Terminal Puffer zu öffnen und <leader><leader> Python in diesem Terminal Puffer zu laufen. Beachten Sie, dass das Terminal die ganze Zeit im Terminal-Job-Modus bleibt.

Leichte Änderung wird hierfür benötigt werden, um mit NeoVim zu arbeiten:

" open a terminal directly below current window 
nnoremap <leader>t :split<cr><c-w><c-j>:terminal<cr><c-w><c-k> 
" save current file and run python on it in terminal window directly below 
nnoremap <expr> <leader><leader> ':w<cr><c-w><c-j>ipython ' . expand('%:p') . '<cr><c-\><c-n><c-w><c-k>' 

In der NeoVim Version, müssen wir von Terminal-Normal-Modus zum Terminal-Job-Modus zu ändern, bevor Eingang zum Terminal vorbei, und dann Zurück zum Terminal-Normal-Modus.

Verwandte Themen