Domanda

Voglio aprire un percorso per vim da copia-modalità di schermo da

Ctrl-A f

allo stesso modo come posso aprire file esterni a Vim da

Ctrl-W f

Come si può aprire un percorso in Vim in copia-modalità di schermo?


--- Grazie per Samuil per ottenere il passaggio cruciale

Supponiamo mouse è nel percorso / file nel seguente codice che rappresenta display quando schermo è il

text[space]PATH/file[space]text

premo ^ A f al percorso / file. Deve salvare il percorso del file in / tmp / screenCopyFile tale che possiamo usare cat il seguente comando che il ^A f dovrebbe iniziare:

^A: exec vim `cat PATH/file`

faccio funzionare l'ordine manualmente senza successo. Non ha espandere il comando cat, ma si apre un file chiamato cat.

In altre parole, vogliamo rendere la lettera f sta per

exec vim `cat /tmp/screenCopyFile`

legandosi in .screenrc.

Grazie Rampion per la risposta!

È stato utile?

Soluzione

Ok, ecco una soluzione:

Inserire il seguente 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

Quindi aggiungere questa riga al vostro .screenrc:

# 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

(cambiando il /path/to/ opportunamente)

Quindi, per utilizzarlo, assicurarsi che si riavvia screen (o ricaricare la .screenrc). Entra modalità di copia con ^A[, cursore sul primo carattere di un nome di file, poi ha colpito CTRL-f.

Ho provato questo, e funziona per me, così mi dica se avete problemi.

Se volete vedere come sapevo come fare questo, controllare man screen a vedere come funzionano tutti i vari comandi.

Un miglioramento che potrebbe essere fatto è quello di essere in grado di trovare l'inizio di un percorso, ma non potevo farlo in modo affidabile con i comandi di movimento in modalità copia unica di schermo (ad esempio, tutto ciò che si muoveva al primo / di "/a/path" mosso al | di "|/a/path")

Questo è dovuto alle limitazioni del movimento di screen comandi in modalità di copia:

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.

Quindi, se abbiamo cambiato la linea stuff sopra per

stuff "Bw Ebe "

sarebbe spostarsi all'inizio di un percorso, ma sarebbe anche includere qualsiasi spazzatura non spazio bianco che è venuto prima il percorso. Quindi, fintanto che tutti i percorsi sono spazi delimitati (su entrambi i lati) questo dovrebbe funzionare.

In realtà

stuff "B//^M E?/^Me "

sembra funzionare abbastanza bene, dal momento che utilizza la ricerca per trovare il primo e l'ultimo / (digitare il ^M in vim premendo CTRL-v, quindi immettere). Non ho ancora testato tutti i casi limite, ma sembra di lavorare per:

 /a/path
 #/a/path
 /a/path#

Tuttavia, sta andando a fallire per

 a/relative/path

Altri suggerimenti

Non so vim troppo buono, ma con pochi comandi Dovrebbe essere fatto facilmente. Quando hai già il nome del file nel vostro pastebuffer, è possibile utilizzare questi comandi più utili:

^A : writebuf /tmp/.screenpomfile
^A : exec vim parameters

Non so come fare vim leggere il nome del file da file (penso che sia possibile), ma si potrebbe :exec il proprio script scritto in un guscio in grado di analizzare `expr `espressioni:

#!/bin/sh
vim `cat /tmp/.screenpomfile`

In seguito è possibile associare le proprie chiavi a queste azioni, e li usa in maniera abbastanza efficace.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top