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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top