CtrlpとCtagsを使用してVimをよりスマートに

私はVimが大好きで、毎年コーディングと書き込みのすべてにVimを使用しています。特にJavaScriptを使用している人にとっては、Sublime TextやVSCodeなどの最新のコードエディターを好む人が増えていますが、おもちゃをよりインテリジェントにするために少し時間を費やしたいと思います。

CtrlP

Sublime Text、Atom、またはVSCodeを使用している場合は、ctrl + p生産性を向上させるために何千回も使用する必要があります。この派手なVimプラグインCtrlPが必要なものをすべて提供してくれるので、Vimの人なら嫉妬しないでください。

インストールとセットアップについては、この公式ドキュメントを確認してください。

Ctags

Ctagsは、コード、インデックス作成メソッド、クラス、変数、その他の識別子をふるいにかけ、インデックスをタグファイルに保存するツールです。タグファイルには、1行に1つのタグが含まれています。コマンドライン引数とctagsが実行される言語に応じて、このインデックスから多くの情報を取得できます。

Ctagsは現在41のプログラミング言語をサポートしており、さらに多くの定義を追加するのは比較的簡単です。

Ctagsを使用すると、特に作業しているコードに慣れていない場合に、より大きなプロジェクトを簡単にナビゲートできます。メソッドが何をするのか、またはメソッドがどのように呼び出されるのかわからない場合は、その定義に直接ジャンプできます。500行以上のPerlスクリプトの下降スパイラルにあり、変数が3時間前に定義された場所を知りたい場合は、すぐにそのスクリプトに戻ることができます。その後、作業していた場所にすぐに戻ることができます。

OSXでHomebrewを使用してCtagsをインストールできます。

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

仕組みは次のとおりです。

それが役に立てば幸い :)

私はオーディオとウェブのコードを書き、YouTubeでギターを弾いています。私からもっと多くのものを見たい、または私についてもっと知りたい場合は、いつでも私を見つけることができます:

ウェブサイト:

//haochuan.io/

GitHub:

//github.com/haochuan

中:

//medium.com/@haochuan

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