![vim 捷徑會在已開啟的視窗中開啟遊標下的文件](https://rvso.com/image/31647/vim%20%E6%8D%B7%E5%BE%91%E6%9C%83%E5%9C%A8%E5%B7%B2%E9%96%8B%E5%95%9F%E7%9A%84%E8%A6%96%E7%AA%97%E4%B8%AD%E9%96%8B%E5%95%9F%E9%81%8A%E6%A8%99%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6.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'