2008-11-05 7 views

Répondre

11

Si vous voulez passer le numéro de ligne à une commande shell, vous pouvez faire

:exe "!echo " . line(".") 
+1

Salut, C'est une réponse géniale. exactement ce que je cherchais. – akshat

+0

Merci pour l'ingrédient manquant pour ma ligne et inclure la sortie ': exe" r! " . getline (".") ' – bsb

13

. (point) signifie la ligne actuelle.

Pour clarifier: Ceci est destiné à des choses comme :1,.s/foo/bar/g qui transformera chaque foo-bar depuis le début du fichier jusqu'à la ligne actuelle.

Je ne sais pas au courant d'un moyen d'obtenir le numéro de ligne étendu pour une commande shell, qui est ce que vous essayez de faire en faisant :!echo .

Vous pouvez en savoir plus sur les extensions qui sont faites (comme % et # par exemple) dans :he cmdline-special.

+0

Cette ne marche pas. Quand je donne une commande :! Echo. La sortie est juste un "." au lieu du numéro de ligne attendu. – akshat

+0

Non, cela ne fonctionne pas, voir ma clarification. Peut-être que si vous posez une autre question où vous expliquez en détail votre raccourci planifié, nous pouvons vous aider avec un autre moyen de réaliser ce que vous avez prévu. – WMR

+0

merci WMR. En revenant sur ma question, je me rends compte que je n'ai pas correctement expliqué mon exigence. PS: J'avais regardé cmdline-special mais je ne l'ai pas trouvé. J'espérais qu'il y avait quelque chose qui n'était pas mentionné. – akshat

1

Commandes dans vim fonctionne sur la ligne courante si:

:s/foo/bar/g 

transformera chaque foo dans bar sur la ligne que vous êtes actuellement.

+0

Je pense que le 'g' le fera remplacer globalement dans tout le fichier. –

+0

Non, dans ce cas, le 'g' entraînera l'application de l'expression rationnelle globalement à la ligne en cours. – Tomalak

+1

Pour le faire globalement, vous devez mettre:% s/foo/bar/g OU: 1, $ s/foo/bar/g –

2

Pour retourner le numéro de ligne de la ligne courante au bas de l'écran, utilisez:

:.=  
Questions connexes