![すでに開いているウィンドウでカーソルの下にあるファイルを開くための vim ショートカット](https://rvso.com/image/31647/%E3%81%99%E3%81%A7%E3%81%AB%E9%96%8B%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%A7%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%81%AE%E4%B8%8B%E3%81%AB%E3%81%82%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E9%96%8B%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%20vim%20%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88.png)
vimでは カーソル下のファイルを開くコマンドを使用しますgf
。
を押すと、そのファイルを新しい分割ウィンドウで簡単に開くこともできます<c-w> f
。これは本当に便利で、時間を節約できる機能です。
しかし、すでに開いている分割ウィンドウでファイルを開く方法(新しいウィンドウを作成せずに)がわかりません。
答え1
全てのピースを組み合わせて、このトリックを実行しました。最善の方法は、すべてのコマンドのカスタム マッピングを作成することです。
map <F8> :let mycurf=expand("<cfile>")<cr><c-w> w :execute("e ".mycurf)<cr><c-w>p
説明:
map <F8>
「F8」に続くコマンドをマップしますlet mycurf=expand("<cfile>")
カーソル下のファイル名を取得し、保存します。mycurf
<c-w>w
開いている次の分割ウィンドウにフォーカスを変更しますexecute("e ".mycurf)
保存されたファイルを開きますmycurf
- 最後に
<c-w>p
フォーカスを前のウィンドウ(実際に来たウィンドウ)に変更します
答え2
答え3
これは私にとってはうまくいきました:
function! OpenFileInPrevWindow()
let cfile = expand("<cfile>")
wincmd p
execute "edit " . cfile
endfunction
nmap ,f :call OpenFileInPrevWindow()<CR>
答え4
私は2013年の上記の回答に十分腹を立てたが、やめる私が気にしていた状況で確実に動作し、それらを処理するために少しだけ堅牢な関数を作成しました。gF
具体的には (つまり、「行番号へ移動」機能を含む)、例として次のようになります。
function! gfriend#goto_cWORD(winmotion)
let cword = expand("<cWORD>")
let st = match(cword, '\v\f+:\d+')
let end = matchend(cword, '\v\f+:\d+')
if end !=# -1
let cword = cword[st:end - 1]
endif
let bits = split(cword, ':')
let starting_window = nvim_win_get_number(0)
" If there's no previous window, create a new one
wincmd p
if nvim_win_get_number(0) ==# starting_window
execute(a:winmotion." ".bits[0])
else
execute("e ".bits[0])
endif
if bits[1]
execute(bits[1])
endif
endfunction
使用方法は次のようになります。
nmap <silent> <Leader>gF \
:<C-u>call gfriend#goto_cWORD(winwidth(0) >=# 180 ? 'vsp' : 'sp')<CR>
(小さな)ものを投稿しましたGitHubへ必要に応じて、プラグインとしてインストールすることもできます。
Plug 'ELLIOTTCABLE/vim-gfriend'