vi ligne de commande, ligne de goto et colonne

17

Je mélange depuis longtemps l'utilisation de emacset vi( vim). Chacun d'eux a son avantage. J'analyse la sortie d'erreur d'une compilation comme un processus et j'obtiens un numéro de ligne et de colonne mais je ne peux utiliser que emacspour aller directement à une ligne et une colonne:

emacs +15:25 myfile.xml

avec vije n'ai que le numéro de ligne (selon la page de manuel)

vi +15 myfile.xml

Il y a une option pour aller positionner le curseur sur un motif ( vi +/pattern myfile.xml) que je n'ai jamais pu travailler. Mais cela ne m'aiderait pas car le motif n'est pas toujours la première occurrence dans le fichier.

Comment puis-je commencer vipour qu'il passe à la colonne 25 à la ligne 15 de mon dossier? Puis-je faire quelque chose avec -coption?

Dominique
la source
3
Depuis que vous avez taguée vim, avez - vous pensé le quickfixsystème qui exécute le compilateur à partir de vim, parse la sortie d'erreur, Remplit une liste d'erreurs (avec navigate :cp, :cn, :clcommandes), et positionne le curseur à la première?
Random832
Si vous ouvrez un fichier dans vi et que vous le saisissez, :15il passera à la ligne 15 .. J'espère que cela vous aidera
code ninja

Réponses:

17

Vous pouvez utiliser:

vi '+normal 15G25|'  myfile.xml
Christa
la source
2
explication: la plupart des commandes (c'est-à-dire la plupart des lettres) dans vi peuvent être précédées d'un nombre (ou d'une plage) pour changer son comportement par défaut ou pour le répéter (ou l'appliquer sur une plage spécifique). Dans vi, en mode commande, vous pouvez faire 15Gpour aller à la ligne 15 et 25|aller à la col 25. Et Christa montre comment faire la même chose à partir de la ligne de commande.
Olivier Dulac
7

Avec le plugin de ligne de fichier , vous pouvez simplement ajouter une ligne et une colonne au nom du fichier, à la fois lors de l'appel de Vim et à l'intérieur avec des commandes comme :edit:

vim myfile.xml:15:25
Ingo Karkat
la source
Bon de savoir que cela existe, mais je pense que j'utiliserai une réponse qui ne nécessite pas de plugin supplémentaire
Dominique
@Dominique Vous pouvez également vim myfile.xml +15pour la ligne sans plugin, mais pas pour autant que je sache
Izkata
5

juste pour le plaisir il y a -c 'normal 14j24l'qui vous mettra en ligne 15 caractère 25

hildred
la source
4

Je ne connais pas l' -coption, mais vous devriez pouvoir faire:

vi '+cal cursor(15,25)' myfile.xml

(assurez-vous de citer à cause des parenthèses ())

Anthon
la source
cursor()utilise un index d'octets pour la colonne, mais il s'agit généralement d'un nombre de caractères.
Ingo Karkat
@IngoKarkat Est-ce vraiment important? Le texte est UTF-8.
Dominique
2
Il est important pour les caractères non ASCII, qui sont représentés par plusieurs octets. En outre, un onglet et des caractères de contrôle occupent généralement plusieurs colonnes d'affichage.
Ingo Karkat
2

À noter:

-c command 

Exécutez la commande ex donnée au démarrage. Une seule option -c est autorisée pour vi ; Vim accepte jusqu'à 10. Une ancienne forme de cette option,+command est toujours prise en charge.

Le +commanda la même ex commandlimitation unique lors de l'utilisationvi .

Le +/patternest également limité à une commande avecvi .

(extrait de vim et ex editor )

Bee Kay
la source
1

Vous pouvez ajouter le code suivant à votre vimrc, lorsque vous revenez à votre fichier, vim revient automatiquement à son ancienne position:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Golfe Persique
la source