![Vim-Verknüpfung zum Öffnen einer Datei unter dem Cursor in einem bereits geöffneten Fenster](https://rvso.com/image/31647/Vim-Verkn%C3%BCpfung%20zum%20%C3%96ffnen%20einer%20Datei%20unter%20dem%20Cursor%20in%20einem%20bereits%20ge%C3%B6ffneten%20Fenster.png)
In vim können Sie Öffnen Sie eine Datei unter dem Cursormithilfe des gf
Befehls.
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 Befehlelet 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 Fensterexecute("e ".mycurf)
öffnet die Datei gespeichert inmycurf
- ändert schließlich
<c-w>p
den 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>
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 gF
Einzelnen (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'