Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vim で tag などを使わずに require/import 先に移動する

$
0
0

はじめに

vim を利用していて、gf コマンドが思うように動かねえ!と嫌な気持ちになっている人向けです。

考え方

対象となるファイルパスを取得し、それにマッチするパスを project root から検索する

実装

setsuffixesadd=.php,.js,.rb,.java,.json,.md,.asnnoremap gf<CR> :<C-u>execute printf('edit %s', MyProjectRootFindFile(expand('<cfile>')))<CR>nnoremapgfs :<C-u>execute printf('split %s', MyProjectRootFindFile(expand('<cfile>')))<CR>nnoremap gfv :<C-u>execute printf('vsplit %s', MyProjectRootFindFile(expand('<cfile>')))<CR>function! MyProjectRootFindFile(path)return findfile(substitute(a:path,'^[\.\/]*','','g'), MyProjectRoot(expand('%:p')) . '**;')endfunctionfunction! MyProjectRoot(path)letpath=a:pathwhilepath!='/'for target in ['.svn','.git','package.json','composer.json'] " etc...let targetPath = printf('%s/%s',path, target)if isdirectory(targetPath)|| filereadable(targetPath)returnpath" found project root.endifendforletpath= fnamemodify(path,':p:h:h')endwhilereturn expand('%:p:h')" not found project root.endfunction

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>