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'

相關內容