Question

Je veux ouvrir un chemin vers vim de copie en mode d'écran par

Ctrl-A f

De même que je peux ouvrir des fichiers externes dans vim de

Ctrl-W f

Comment pouvez-vous ouvrir un chemin dans vim en mode copie de l'écran?


--- Nous vous remercions de Samuil pour obtenir le mouvement crux

Faisons souris hypothétiquement PATH / fichier dans le code suivant qui représente l'affichage lorsque l'écran est sur

text[space]PATH/file[space]text

Je presse ^ Af PATH / fichier. Il devrait enregistrer le chemin du fichier / tmp / screenCopyFile tel que nous pouvons utiliser cat dans la commande suivante que le ^A f devrait commencer:

^A: exec vim `cat PATH/file`

je lance la commande sans succès manuellement. Elle n'a pas élargi la commande de chat, mais il ouvre un fichier appelé chat.

En d'autres termes, nous voulons faire la f signifie lettre pour

exec vim `cat /tmp/screenCopyFile`

en se liant à .screenrc.

Merci raiponce pour votre réponse!

Était-ce utile?

La solution

Ok, voici une solution:

Mettez ce qui suit dans /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

Ensuite, ajoutez cette ligne à votre .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

(modification de la /path/to/ appropriée)

Alors, d'utiliser, assurez-vous de redémarrer screen (ou recharger le .screenrc). Entrer en mode copie avec ^A[, curseur sur le premier caractère d'un nom de fichier, puis appuyez sur CTRL-f.

Je l'ai testé, et il fonctionne pour moi, dites-moi si vous avez des questions.

Si vous voulez voir comment je savais comment faire, consultez man screen à voir comment fonctionnent toutes les différentes commandes.

Une amélioration qui pourrait être faite est d'être en mesure de trouver le début d'un chemin, mais je ne pouvais pas faire cela de manière fiable avec les commandes de mouvement en mode copie de l'écran seulement (par exemple, tout ce qui bouge à la première / de « /a/path » déplacé à la | de "|/a/path")

Ceci est dû aux limitations du mouvement screen commandes en mode copie:

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.

Donc, si nous avons changé la ligne de stuff ci-dessus pour

stuff "Bw Ebe "

il se déplacerait au début d'un chemin, mais il comprendrait également une ordure non-blancs qui sont venus avant le chemin. Donc, tant que tous vos chemins sont des espaces délimités (des deux côtés) cela devrait fonctionner.

En fait

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

semble fonctionner assez bien, car qui utilise la recherche pour trouver le premier et le dernier / (tapez le ^M dans vim en appuyant sur CTRL-v, puis entrez). Je ne l'ai pas testé tous les cas de pointe, mais il semble fonctionner pour:

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

Cependant, il va échouer pour

 a/relative/path

Autres conseils

Je ne sais pas vim trop bon, mais avec quelques commandes il devrait être fait facilement. Si vous avez déjà le nom de fichier dans votre pastebuffer, vous pouvez utiliser ces commandes utiles:

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

Je ne sais pas comment faire vim lire nom du fichier (je pense qu'il est possible), mais vous pouvez :exec votre propre script écrit dans une coquille capable d'analyser les expressions `expr `:

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

Plus tard, vous pouvez lier vos propres clés à ces actions, et de les utiliser de façon très efficace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top