Я собрал все части для добиваний цели. Лучший способ состоит в том, чтобы создать пользовательское отображение для всех команд:
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
изменяет фокус на предыдущее окно (куда мы на самом деле произошли из),Это не может быть сделано легко. A [count]
прежде <C-w>f
указывает который соответствие файла на 'path'
открыт, это не выбирает существующее окно. Только для <C-w>w
команда, [count]
означает, "переходят к существующему числу окна".
Для получения той функциональности необходимо записать пользовательское отображение который также
[count]
окно и эмулирует gf
команда, или[count]
окно, и выполняется gf
тамМне помогло:
function! OpenFileInPrevWindow()
let cfile = expand("<cfile>")
wincmd p
execute "edit ". cfile
endfunction
nmap,f :call OpenFileInPrevWindow()<CR>
Я искал ту же функцию VIm и нашел это решение, которое прекрасно работает:
map <F8> :vertical wincmd f<CR>
Меня достаточно раздражали приведенные выше ответы от 2013 года, которые не перестали надежно работать в ситуациях, которые мне небезразличны, и написал несколько -более -надежных функций для их обработки. Для gF
в частности (, т.е. включая функциональность "goto linenumber" ), например:
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'