概要
vimにgf
というカーソル配下に書かれているファイルを開くコマンドがあります。
include先を開いたりする際に便利なのですが、ES6の場合、import文で書くファイルパスは.jsが省略されているため、実際のパスと一致しないため開けません。
また、index.jsの場合はindex.js自体が省略されるため、ディレクトリが開かれてしまいます。
そこでfiletypeがjavascriptの場合は、カーソル配下にパスの記述がある場合、Ctrl+Gでimport先のファイルをsplitで開くスクリプトを書きました。下記コードを.vimrc等に貼り付けると使えるようになります。
コード
function! ReadJSFile() abort
lets:currentPos =col('.')lets:colNum =s:currentPos -1lets:lastPos = len(getline('.'))lets:fileName =''whiles:colNum >-1if getline('.')[s:colNum] =~"\['\"\]"breakendlets:fileName = getline('.')[s:colNum] . s:fileName
lets:colNum =s:colNum -1endwhilewhiles:currentPos <s:lastPos
if getline('.')[s:currentPos] =~"\['\"\]"breakendlets:fileName =s:fileName . getline('.')[s:currentPos]
lets:currentPos =s:currentPos +1endwhilelets:fullName = simplify(expand("%:h") . '/' . s:fileName)if!filereadable(s:fullName)if isdirectory(s:fullName)lets:fullName =s:fullName . '/index.js'elselets:fullName =s:fullName . '.js'endifendif
execute ':sp ' . s:fullName
endfunctionautocmdFileType javascript nmap <C-g> :call ReadJSFile()<CR>
splitではなくてvsplitを使っている方やいま開いているファイルの代わりに開いてほしい方はexecute ':sp '
の箇所をexecute ':vs '
やexecute ':e '
にすることで望んでいる動作に変更できます。
Ctrl+Gが嫌な人は<C-g>
の箇所を別のキーに書き換えてください。