Skrót vim, aby otworzyć plik pod kursorem w już otwartym oknie

12

W vimie możesz otworzyć plik pod kursorem za pomocą gfpolecenia.

Można również łatwo otworzyć ten plik w nowym podzielonym oknie, naciskając <c-w> f. To naprawdę miła i oszczędzająca czas funkcja.

Nie wiem jednak, jak otworzyć plik w już otwartym podzielonym oknie (bez tworzenia nowego).

psibar
źródło
1
Możesz rzucić okiem na tę previewfunkcję (patrz :h preview).
Stéphane Chazelas
Tak, używam również podglądu. Nie chciałem jednak otwierać pliku w oknie podglądu, ale wyraźnie w innym.
psibar

Odpowiedzi:

10

Zebrałem wszystkie elementy, aby załatwić sprawę. Najlepszym sposobem jest utworzenie niestandardowego odwzorowania dla wszystkich poleceń:

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

Wyjaśnienie:

  • map <F8> mapuje na „F8” następujące polecenia
  • let mycurf=expand("<cfile>") pobiera nazwę pliku pod kursorem i zapisuje ją mycurf
  • <c-w>w zmienia fokus na następne otwarte okno podziału
  • execute("e ".mycurf) otwiera plik zapisany w mycurf
  • w końcu <c-w>pzmienia fokus na poprzednie okno (skąd właściwie przyjechaliśmy)
psibar
źródło
1

Nie da się tego łatwo zrobić. Znak „ [count]przed” <C-w>fokreśla, które dopasowanie pliku 'path'jest otwarte, nie wybiera istniejącego okna. Tylko dla <C-w>wpolecenia [count]oznacza „przejdź do istniejącego numeru okna”.

Aby uzyskać tę funkcjonalność, musisz napisać niestandardowe mapowanie, które albo

  • pobiera plik, idzie do [count]okna i emuluje gfpolecenie, lub
  • klonuje bieżący bufor do [count]okna i wykonuje się gftam
Ingo Karkat
źródło
Tak, jedynym sposobem na to jest napisanie niestandardowego mapowania. Miałem tylko problem z pobraniem pliku pod kursorem. Ale myślę, że już to wymyśliłem
psibar
1

Szukałem tej samej funkcji VIm i znalazłem to rozwiązanie, które działa jak urok:

map <F8> :vertical wincmd f<CR>

Strona źródłowa .

waldauf
źródło
0

To działało dla mnie:

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

nmap ,f :call OpenFileInPrevWindow()<CR>
Sirex
źródło