在 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'