Nicht imstande, Vim-ähnliche C-W f für Screen-Kopie-Modus zu haben
-
23-08-2019 - |
Frage
ich öffnen will, einen Weg zu vim von Bildschirm-Kopie-Modus durch
Ctrl-A f
ähnlich wie kann ich externe Dateien in Vim öffnen, indem
Ctrl-W f
Wie kann man einen Pfad in Vim öffnet in Bildschirm-Kopie-Modus?
--- Danke für Samuil den Kern bewegen zu bekommen
Nehmen wir an, Maus auf Pfad / Datei in dem folgenden Code ist die Anzeige darstellt, wenn Bildschirm auf
isttext[space]PATH/file[space]text
Ich drücke ^ A f auf Pfad / Datei. Es sollte den Pfad der Datei in / tmp / screenCopyFile so speichern, dass wir cat
im folgenden Befehl, die die ^A f
beginnen sollte verwenden können:
^A: exec vim `cat PATH/file`
Ich betreiben manuell erfolglos den Befehl. Es hat nicht die Katze Befehl erweitern, aber es öffnet eine Datei namens Katze.
Mit anderen Worten, wir wollen den Brief f
steht für
exec vim `cat /tmp/screenCopyFile`
durch in .screenrc Bindung.
Danke Rampion für Ihre Antwort!
Lösung
Ok, hier ist eine Lösung:
Setzen Sie die folgende in /path/to/edit-file-under-cursor.screen
:
# edit-file-under-cursor.screen
# prevent messages from slowing this down
msgminwait 0
# copy path starting at cursor
stuff " Ebe "
# write the path to a file
writebuf /tmp/screen-copied-path
# open that file in vim in a new screen window
screen /bin/sh -c 'vim `cat /tmp/screen-copied-path`'
# turn message waiting back on
msgminwait 1
# vi: ft=screen
Dann folgende Zeile zu .screenrc
hinzufügen:
# bind CTRL-f to open the file starting at the cursor
# when in copy mode
bindkey -m ^f source /path/to/edit-file-under-cursor.screen
(Änderung der /path/to/
entsprechend)
Dann verwenden möchten, stellen Sie sicher, dass Sie neu starten screen
(oder die .screenrc
neu laden).
Geben Sie den Kopiermodus mit ^A[
, den Cursor auf das erste Zeichen eines Dateinamens,
dann traf CTRL-f
.
Ich habe dies getestet und es funktioniert für mich, so sage mir, wenn Sie irgendwelche Fragen haben.
Wenn Sie sehen wollen, wie ich wusste, wie dies zu tun, überprüfen man screen
zu
sehen, wie all die verschiedenen Befehle funktionieren.
Eine Verbesserung, die vorgenommen werden könnte, ist in der Lage sein, den Anfang eines Weges zu finden, aber ich konnte das nicht zuverlässig mit nur Kopiermodus Bewegungsbefehlen des Bildschirms (zB alles, was auf den ersten /
von „/a/path
“ bewegt bewegte zum |
von "|/a/path
")
Dies ist aufgrund der Beschränkungen von screen
der Bewegungsbefehle im Kopiermodus:
Movement keys: h, j, k, l move the cursor line by line or column by column. 0, ^ and $ move to the leftmost column, to the first or last non-whitespace character on the line. H, M and L move the cursor to the leftmost column of the top, center or bottom line of the window. + and - positions one line up and down. G moves to the specified absolute line (default: end of buffer). | moves to the specified absolute column. w, b, e move the cursor word by word. B, E move the cursor WORD by WORD (as in vi). C-u and C-d scroll the display up/down by the specified amount of lines while preserving the cursor position. (Default: half screen-full). C-b and C-f scroll the display up/down a full screen. g moves to the beginning of the buffer. % jumps to the specified percentage of the buffer. ... Searching: / Vi-like search forward. ? Vi-like search backward. C-a s Emacs style incremental search forward. C-r Emacs style reverse i-search.
Wenn wir also die stuff
Linie oben geändert
stuff "Bw Ebe "
wäre es für den Anfang eines Pfades zu bewegen, aber es wäre auch jedes nicht-Leerzeichen Junk umfasst, die vor dem Weg kamen. Solange alle Ihre Pfade Leerzeichen begrenzt sind (auf beiden Seiten) dies sollte funktionieren.
Eigentlich
stuff "B//^M E?/^Me "
scheint recht gut zu funktionieren, denn das ist die Suche verwendet den ersten und letzten /
(geben Sie den ^M
in vim durch CTRL-v schlagen, dann eingeben) zu finden. Ich habe nicht alle Grenzfälle getestet, aber es scheint zu funktionieren:
/a/path #/a/path /a/path#
Doch es wird nicht für
a/relative/path
Andere Tipps
Ich weiß nicht, vim auch gut, aber mit ein paar Befehle sollte es leicht getan werden. Wenn Sie bereits Dateinamen in Ihrem pastebuffer haben, können Sie diese nützlichen Befehle zur Verfügung:
^A : writebuf /tmp/.screenpomfile
^A : exec vim parameters
Ich weiß nicht, wie vim
Dateinamen aus der Datei lesen zu machen (ich glaube, es möglich ist), aber Sie können Ihre eigene Skript geschrieben in einer Schale der Lage :exec
`Ausdrücke `expr
zu analysieren:
#!/bin/sh
vim `cat /tmp/.screenpomfile`
Später können Sie Ihre eigenen Schlüssel für diese Maßnahmen binden, und nutzen sie sehr effektiv.