2016-09-12 5 views
0

Wenn Sie taglist Plugin in VIM verwenden, können wir Ctrl + ] verwenden, um zu einer globalen Variablen oder einer Funktion zu springen. Wenn die Variable jedoch lokal ist, kann sie nicht in den Tags gefunden werden. Ich fand von diesem link, dass wir zu den lokalen Variablen springen können, indem wir gd oder globale Variable verwenden, gD verwendend.Tagliste und lokale Variable

Da dies außerhalb des Bereichs des Befehls taglist liegt, können wir + t nicht verwenden, um zu der Stelle zurückzukehren, von der wir gesprungen sind.

Ist es möglich, taglist zu verbessern, um zu einer lokalen Variablen zu springen, falls kein Tag gefunden wird? Und dann den Stapel benutzen, um zu dem Ort zurückzukehren, von dem er gesprungen ist?

+1

Sicher Sie, dass als Patch implementieren könnte (so die Antwort auf Ihre Frage ist „JA“), aber dies ist nicht Kern-Tag Funktionalität, so der Autor des Plugins kann es nicht für die Aufnahme akzeptieren . –

+0

@IngoKarkat können Sie mir einen Hinweis geben, wie kann ich diesen Patch entwickeln? Ich werde das Verhalten von 'Ctrl' +'] 'Schlüssel übersteuern müssen – Raj

+0

Erstens,' 'ist nicht verwandt * in irgendeiner Weise * mit dem Taglist-Plugin. Zweitens springt '' auf das erste übereinstimmende Tag, unabhängig davon, in welcher Datei es sich befindet. Wenn Sie die Datei auswählen möchten, zu der Sie springen, versuchen Sie 'g]'. – romainl

Antwort

1

Hier ist eine Zuordnung. Da das Taglist-Plug-in das nicht definiert (es stellt nur eine Anzeige von Tags des aktuellen Puffers bereit und richtet Tags ein), ist keine Integration erforderlich.

Dieser zeichnet zuerst die aktuelle Puffer- und Cursorposition auf und versucht dann, den normalen Tag-Sprung auszuführen. Wenn sich die Position nicht geändert hat, greifen wir auf den Befehl gd zurück. Oh, eigentlich müssen wir die Position nicht überprüfen und stattdessen try...catch verwenden. Version 2:

nnoremap <silent> <C-]> :<C-u>try<Bar>execute 'normal!' (v:count ? v:count : '') . "\<lt>C-]>"<Bar>catch /^Vim\%((\a\+)\)\=:E426:/<Bar>execute 'normal! gd'<Bar>endtry<CR> 
+0

nicht genau das, was ich wollte, aber ziemlich nah. Danke für die Lösung. – Raj