Incapaz de tener Vim-como C-W f para copiar en modo de pantalla
-
23-08-2019 - |
Pregunta
Quiero abrir un camino a vim de copia en modo de pantalla
Ctrl-A f
Del mismo modo que puedo abrir archivos externos en Vim
Ctrl-W f
¿Cómo se puede abrir un camino en Vim en modo de copia de pantalla?
--- Gracias por Samuil para conseguir el movimiento quid
Vamos a suponer que el ratón está en ruta / archivo en el siguiente código que representa pantalla cuando la pantalla está en
text[space]PATH/file[space]text
presiono ^ Un f en ruta / archivo. Debe guardar la ruta del archivo en el directorio / tmp / screenCopyFile de tal manera que podemos utilizar cat
en el siguiente comando, que la ^A f
debe comenzar:
^A: exec vim `cat PATH/file`
funciono con el comando manualmente sin éxito. Que no se amplió el comando cat, pero se abre un archivo llamado gato.
En otras palabras, queremos hacer la letra f
significa
exec vim `cat /tmp/screenCopyFile`
mediante la unión en .screenrc.
Gracias Rampion- por su respuesta!
Solución
Ok, aquí está la solución:
Coloque el siguiente en /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
A continuación, añadir esta línea a su .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 el /path/to/
apropiadamente)
A continuación, utilizar, asegúrese de reiniciar screen
(o recargar la .screenrc
).
Entrar en el modo de copia con ^A[
, cursor al primer carácter de un nombre de archivo,
después haga clic en CTRL-f
.
He probado esto, y funciona para mí, así que dime si tiene algún problema.
Si quieres ver cómo sabía cómo hacer esto, consulte a man screen
ver cómo funcionan los distintos comandos.
Una mejora que se podría hacer es ser capaz de encontrar el inicio de un camino, pero no podía hacer eso de forma fiable con los comandos de movimiento en modo de copia única de la pantalla (por ejemplo, lo que se moviera a la primera /
de "/a/path
" movido a la |
de "|/a/path
")
Esto es debido a las limitaciones de movimiento de screen
comandos en el modo de 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.
Así que si cambiamos la línea stuff
anterior a
stuff "Bw Ebe "
se movería hasta el inicio de un camino, sino que también incluiría cualquier basura no está en blanco que vino antes de la ruta. Así que, mientras todos sus caminos se delimitan los espacios en blanco (en ambos lados) esto debería funcionar.
En realidad
stuff "B//^M E?/^Me "
parece que funciona bastante bien, ya que utiliza la búsqueda para encontrar la primera y la última /
(escriba el ^M
en vim pulsando CTRL-V, a continuación, introduzca). No he probado todos los casos extremos, pero parece que funciona para:
/a/path #/a/path /a/path#
Sin embargo, va a fallar por
a/relative/path
Otros consejos
No sé vim demasiado bueno, pero con unos pocos comandos que se debe hacer con facilidad. Cuando ya tiene el nombre de archivo en su pastebuffer, puede utilizar estos comandos útiles:
^A : writebuf /tmp/.screenpomfile
^A : exec vim parameters
No sé cómo hacer vim
leer el nombre de archivo del archivo (creo que es posible), pero se puede :exec
su propio guión escrito en una cáscara capaz de analizar `expr
`expresiones:
#!/bin/sh
vim `cat /tmp/.screenpomfile`
Más tarde se puede obligar a sus propias claves de estas acciones, y utilizarlos con bastante eficacia.