Vim-Verknüpfung zum Öffnen einer Datei unter dem Cursor in einem bereits geöffneten Fenster

Vim-Verknüpfung zum Öffnen einer Datei unter dem Cursor in einem bereits geöffneten Fenster

In vim können Sie Öffnen Sie eine Datei unter dem Cursormithilfe des gfBefehls.

Man kann die Datei auch ganz einfach in einem neuen geteilten Fenster öffnen, indem man auf klickt <c-w> f. Das ist eine wirklich nette und zeitsparende Funktion.

Ich kann jedoch nicht herausfinden, wie ich die Datei in einem bereits geöffneten geteilten Fenster öffnen kann (ohne ein neues zu erstellen).

Antwort1

Ich habe alle Teile zusammen, um den Trick zu machen. Am besten ist es, eine benutzerdefinierte Zuordnung für alle Befehle zu erstellen:

 map <F8> :let mycurf=expand("<cfile>")<cr><c-w> w :execute("e ".mycurf)<cr><c-w>p

Erläuterung:

  • map <F8>Karten auf "F8" die folgenden Befehle
  • let mycurf=expand("<cfile>")holt den Dateinamen unter dem Cursor und speichert ihn inmycurf
  • <c-w>wändert den Fokus auf das nächste geöffnete geteilte Fenster
  • execute("e ".mycurf)öffnet die Datei gespeichert inmycurf
  • ändert schließlich <c-w>pden Fokus auf das vorherige Fenster (von dem wir eigentlich kamen)

Antwort2

Ich habe nach der gleichen VIm-Funktion gesucht und diese Lösung gefunden, die wunderbar funktioniert:

map <F8> :vertical wincmd f<CR>

Quellenseite.

Antwort3

Das hat bei mir funktioniert:

function! OpenFileInPrevWindow()
    let cfile = expand("<cfile>")
    wincmd p
    execute "edit " . cfile
endfunction

nmap ,f :call OpenFileInPrevWindow()<CR>

Antwort4

Ich habe mich schon genug über die obigen Antworten aus dem Jahr 2013 geärgert, nichtaufhörenfunktionierte zuverlässig in den Situationen, die mir wichtig waren, und ich habe etwas robustere Funktionen geschrieben, um sie zu handhaben. Im gFEinzelnen (d. h. einschließlich der Funktion „Gehe zu Zeilennummer“), als Beispiel:

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

Die Verwendung ist etwa:

nmap <silent> <Leader>gF \
   :<C-u>call gfriend#goto_cWORD(winwidth(0) >=# 180 ? 'vsp' : 'sp')<CR>

Ich habe das (kleine) Ding gepostetzu GitHub, von wo aus Sie es bei Bedarf als Plugin installieren können:

Plug 'ELLIOTTCABLE/vim-gfriend'

verwandte Informationen