Κάντε το Vim σας πιο έξυπνο χρησιμοποιώντας Ctrlp και Ctags

Λατρεύω απολύτως το Vim και χρησιμοποιώ το Vim για όλη μου την κωδικοποίηση και τη γραφή από έτος σε έτος. Αν και περισσότεροι είναι περισσότεροι άνθρωποι, ειδικά για όσους εργάζονται με JavaScript, προτιμούν τους σύγχρονους επεξεργαστές κώδικα όπως το Sublime Text ή το VSCode, θα προτιμούσα να αφιερώσω λίγο χρόνο προσπαθώντας να κάνω το παιχνίδι μου πιο έξυπνο.

CtrlP

Εάν είστε άντρας Sublime Text, Atom ή VSCode, πρέπει να χρησιμοποιήσετε ctrl + pχιλιάδες φορές για να βελτιώσετε την παραγωγικότητα. Λοιπόν, μην ζηλεύεις αν είσαι άντρας Vim γιατί αυτό το φανταχτερό Vim plugin CtrlP θα σου δώσει ό, τι χρειάζεσαι.

Ελέγξτε αυτό το επίσημο έγγραφο για εγκατάσταση και ρύθμιση.

Ctags

Το Ctags είναι ένα εργαλείο που θα διαλέξει τον κώδικα, τις μεθόδους ευρετηρίασης, τις κλάσεις, τις μεταβλητές και άλλα αναγνωριστικά, αποθηκεύοντας το ευρετήριο σε ένα αρχείο ετικετών. Το αρχείο ετικετών περιέχει μία ετικέτα ανά γραμμή. Ανάλογα με τα ορίσματα της γραμμής εντολών και τη γλώσσα ctags που αντιτίθεται, πολλές πληροφορίες μπορούν να ληφθούν από αυτό το ευρετήριο.

Το Ctags υποστηρίζει επί του παρόντος 41 γλώσσες προγραμματισμού και είναι σχετικά εύκολο να προσθέσετε ορισμούς για περισσότερες.

Το Ctags διευκολύνει την πλοήγηση σε ένα μεγαλύτερο έργο, ειδικά εάν ο κώδικας με τον οποίο εργάζεστε είναι άγνωστος. Εάν δεν είστε σίγουροι για το τι κάνει μια μέθοδο ή για το πώς πρέπει να καλείται, μπορείτε να μεταβείτε κατευθείαν στον ορισμό της. Εάν βρίσκεστε στην καθοδική σπείρα ενός σεναρίου Perl γραμμής 500+ και θέλετε να μάθετε πού καθορίστηκε μια μεταβλητή πριν από τρεις ώρες, μπορείτε να επιστρέψετε αμέσως σε αυτήν. Και μετά, μπορείτε να μεταβείτε πίσω στο σημείο όπου εργαζόσασταν.

Μπορείτε να εγκαταστήσετε Ctags χρησιμοποιώντας το Homebrew στο OSX:

brew install ctags

Λάβετε υπόψη ότι το OS X συνοδεύεται από εκτελέσιμο Ctags, αλλά δεν είναι υπερβολικό-Ctags και λείπει τα περισσότερα από τα χρήσιμα χαρακτηριστικά. Εάν δείτε ένα σφάλμα όπως Invalid Parameterόταν εκτελείτε ctags, αυτό σημαίνει ότι το σύστημα δεν χρησιμοποιεί αυτό που εγκαταστήσατε με το Homebrew. Για να το λύσετε:

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

Όταν βρίσκεστε στον κατάλογο που θέλετε να δημιουργήσετε ευρετήριο, απλώς εκτελέστε:

ctags -R.

Τα Ctags θα περάσουν από τον κατάλογο αναδρομικά, επισημαίνοντας όλα τα αρχεία προέλευσης που συναντά. Για πολύ μεγάλα έργα, αυτό μπορεί να διαρκέσει λίγο, αλλά συνήθως είναι αρκετά γρήγορο.

Μπορεί επίσης να χρειαστείτε κάποια επιπλέον διαμόρφωση για Ctags, παρακάτω είναι το ~/.ctagsπου χρησιμοποιώ:

--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.*

Δείτε πώς φαίνεται να πηγαίνετε στον ορισμό λειτουργίας:

Επίσης, μπορείτε να χρησιμοποιήσετε το Ctrlp για αναζήτηση ετικετών αντί για αρχεία. Για να το κάνετε αυτό, πρώτα πρέπει να αντιστοιχίσετε μια συντόμευση στο .vimrc:

nnoremap . :CtrlPTag

Δείτε πώς λειτουργεί:

Ελπίζω να βοηθήσει :)

Γράφω κώδικα για ήχο και web και παίζω κιθάρα στο YouTube. Εάν θέλετε να δείτε περισσότερα πράγματα από εμένα ή να μάθετε περισσότερα για μένα, μπορείτε πάντα να με βρείτε:

Δικτυακός τόπος:

//haochuan.io/

GitHub:

//github.com/haochuan

Μεσαίο:

//medium.com/@haochuan

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