vim 快捷方式在已打开的窗口中打开光标下的文件

vim 快捷方式在已打开的窗口中打开光标下的文件

在 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

我搜索了相同的 VIm 函数并发现了这个解决方案,它的工作方式就像魅力:

map <F8> :vertical wincmd f<CR>

源页面

答案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'

相关内容