В 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
конкретно (т.е. включая функциональность "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'