Machen Sie Ihr Vim mit Strg und Ctags intelligenter

Ich liebe Vim absolut und ich benutze Vim von Jahr zu Jahr für all mein Codieren und Schreiben. Obwohl mehr Menschen, insbesondere diejenigen, die mit JavaScript arbeiten, moderne Code-Editoren wie Sublime Text oder VSCode bevorzugen, würde ich lieber ein wenig Zeit damit verbringen, mein Spielzeug intelligenter zu machen.

CtrlP

Wenn Sie ein Sublime Text-, Atom- oder VSCode-Typ sind, müssen Sie ctrl + ptausende Male verwenden, um die Produktivität zu verbessern. Seien Sie nicht eifersüchtig, wenn Sie ein Vim-Typ sind, denn dieses schicke Vim-Plugin CtrlP bietet Ihnen alles, was Sie brauchen.

Überprüfen Sie dieses offizielle Dokument auf Installation und Einrichtung.

Ctags

Ctags ist ein Tool, das Ihren Code durchsucht, Methoden, Klassen, Variablen und andere Bezeichner indiziert und den Index in einer Tag-Datei speichert. Die Tags-Datei enthält ein einzelnes Tag pro Zeile. Abhängig von den Befehlszeilenargumenten und der Sprache, für die ctags ausgeführt werden, können aus diesem Index viele Informationen abgerufen werden.

Ctags unterstützt derzeit 41 Programmiersprachen und es ist relativ einfach, Definitionen für mehr hinzuzufügen.

Ctags erleichtert das Navigieren in einem größeren Projekt erheblich, insbesondere wenn der Code, mit dem Sie arbeiten, nicht bekannt ist. Wenn Sie sich nicht sicher sind, was eine Methode tut oder wie sie aufgerufen werden soll, können Sie direkt zu ihrer Definition springen. Wenn Sie sich in der Abwärtsspirale eines Perl-Skripts mit mehr als 500 Zeilen befinden und wissen möchten, wo vor drei Stunden eine Variable definiert wurde, können Sie direkt dorthin zurückspringen. Und danach können Sie direkt zu Ihrem Arbeitsplatz zurückkehren.

Sie können Ctags mit Homebrew unter OSX installieren:

brew install ctags

Bitte beachten Sie, dass OS X mit einer ausführbaren Ctags-Datei geliefert wird, diese jedoch nicht überschwänglich ist und die meisten nützlichen Funktionen fehlen. Wenn Invalid Parameterbeim Ausführen ein Fehler auftritt ctags, bedeutet dies, dass das System nicht den mit Homebrew installierten verwendet. Um dies zu lösen:

$ alias ctags="`brew --prefix`/bin/ctags"

Wenn Sie sich in dem Verzeichnis befinden, das Sie indizieren möchten, führen Sie einfach Folgendes aus:

ctags -R.

Ctags durchlaufen das Verzeichnis rekursiv und markieren alle Quelldateien, auf die es stößt. Bei sehr großen Projekten kann dies eine Weile dauern, aber normalerweise ist es ziemlich schnell.

Möglicherweise benötigen Sie auch eine zusätzliche Konfiguration für Ctags. Unten ist die von ~/.ctagsmir verwendete:

--langmap=javascript:.js.es6.es.jsx--javascript-kinds=-c-f-m-p-v
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Za-z0-9_$]+)[ \t]*=[ \t]*\[/\2/A,Array,Arrays/
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Z][A-Za-z0-9_$]+)[ \t]*=[ \t]*function/\2/C,Class,Classes/--regex-javascript=/^[ \t]*class[ \t]+([A-Za-z0-9_$]+)/\1/C,Class,Classes/
--regex-javascript=/^[ \t]*export[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\3/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\5/E,export,Exports/--regex-javascript=/^[ \t]*export[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\7/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?(var|let|const)[ \t]+([A_Za-z0-9_$]+)/\2/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?(var|let|const)[ \t]+([A_Za-z0-9_$]+)[ \t]*[^,]+,[ \t]*([A_Za-z0-9_$]+)/\3/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?(var|let|const)[ \t]+([A_Za-z0-9_$]+)[ \t]*[^,]+,[ \t]*([A_Za-z0-9_$]+)[ \t]*[^,]+,[ \t]*([A_Za-z0-9_$]+)/\4/E,Export,Exports/
--regex-javascript=/^[ \t]*function[ \t]*([A-Za-z0-9_$]+)[ \t\(]/\1/F,Function,Functions/--regex-javascript=/^[ \t]*[\(]function[ \t]*([A-Za-z0-9_$]+)[ \t\(]/\1/F,Function,Functions/--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([a-z][A-Za-z0-9_$]+)[ \t]*=[ \t]*function[^\*][^\*]/\2/F,Function,Functions/--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([a-z][A-Za-z0-9_$]+)[ \t]*=[ \t]*\([^\*]/\2/F,Function,Functions/
--regex-javascript=/^[ \t]*function[ \t]*\*[ \t]*([A-Za-z0-9_$]+)/\1/G,Generator,Generators/--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([a-z][A-Za-z0-9_$]+)[ \t]*=[ \t]*function([ \t]*\*)/\2/G,Generator,Genrators/--regex-javascript=/^[ \t]*(\*[ \t])([A-Za-z0-9_$]+)[ \t]*\(.*\)[ \t]*{/\2/G,Generator,Generators/
--regex-javascript=/^[ \t]*import[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\3/I,Import,Imports/--regex-javascript=/^[ \t]*import[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\5/I,Import,Imports/--regex-javascript=/^[ \t]*import[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\7/I,Import,Imports/
--regex-javascript=/^[ \t]*this\.([A-Za-z0-9_$]+)[ \t]*=.*{$/\1/M,Method,Methods/--regex-javascript=/^[ \t]*([A-Za-z0-9_$]+)[ \t]*[:=][ \t]*[\(]*function[ \t]*\(/\1/M,Method,Methods/--regex-javascript=/^[ \t]*static[ \t]+([A-Za-z0-9_$]+)[ \t]*\(/\1/M,Method,Methods/--regex-javascript=/^[ \t]*([A-Za-z0-9_$]+)\(.*\)[ \t]*{/\1/M,Method,Methods/
--regex-javascript=/^[ \t]*(this\.)*([A-Za-z0-9_$]+)[ \t]*[:=].*[,;]*[^{]$/\2/P,Property,Properties/
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Za-z0-9_$]+)[ \t]*=[ \t]*{/\2/O,Object,Objects/
--regex-javascript=/\/\/[ \t]*(FIXME|TODO|BUG|NOBUG|\?\?\?|\!\!\!|HACK|XXX)[ \t]*\:*(.*)/\1/T,Tag,Tags/
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Za-z0-9_$]+)[ \t]*=[ \t]*[^\[{]*;$/\2/V,Variable,Variables/
--exclude=min--exclude=vendor--exclude=\*.min.\*--exclude=\*.map--exclude=\*.swp--exclude=\*.bak--exclude=tags--exclude=node_modules--exclude=bower_components--exclude=test--exclude=__test__--exclude=build--exclude=dist--exclude=*.bundle.*

So sieht es aus, wenn man zur Funktionsdefinition geht:

Sie können auch Strg verwenden, um nach Tags anstelle von Dateien zu suchen. Dazu müssen Sie zunächst eine Verknüpfung in Ihrem .vimrc:

nnoremap . :CtrlPTag

So funktioniert es:

Ich hoffe es hilft :)

Ich schreibe Code für Audio und Web und spiele Gitarre auf YouTube. Wenn Sie mehr von mir sehen oder mehr über mich wissen möchten, finden Sie mich immer in:

Webseite:

//haochuan.io/

GitHub:

//github.com/haochuan

Mittel:

//medium.com/@haochuan

YouTube: //www.youtube.com/channel/UCNESazgvF_NtDAOJrJMNw0g