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

ist
text[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

machen
exec vim `cat /tmp/screenCopyFile`

durch in .screenrc Bindung.

Danke Rampion für Ihre Antwort!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top