在指定的拆分中打开.netrw中的文件

时间:2011-12-06 04:08:12

标签: vim netrw

这是与on SuperUser相同的问题,但我觉得它有更好的机会在这里得到解答,所以......

在Vim中,我有四个分裂 - 两个两个 - 在左上角有一个netrw是打开的。有没有办法从netrw中打开右下角,左下角等文件?

3 个答案:

答案 0 :(得分:9)

这里有一些提示https://superuser.com/questions/377501/keep-cursor-in-netrw-window-when-browsing-files-in-vim

将它放在你的.vimrc中,

let g:netrw_preview = 1

配置垂直预览分割,然后当光标位于所需文件上时,键入 p 以打开预览窗口。要关闭窗口,请键入 Ctrl W z

vim中用于在没有光标移动的情况下打开的窗口的术语是“预览窗口”。要了解更多相关信息,请参阅

:help netrw-preview
:help CTRL-W_z

或只是

:help netrw

并浏览其他浏览命令和其他netrw功能的目录。

答案 1 :(得分:2)

您可以设置g:netrw_chgwin变量以使netrw在特定窗口中打开文件。参见:

:h netrw-C

所以当你在那个窗口时,让当前窗口成为netrw类型的目标:

:let g:netrw_chgwin = winnr()

另一种方法是在目标窗口(:E)中启动netrw,点击C选择它进行编辑,然后用<c-o>关闭netrw。

答案 2 :(得分:0)

将以上答案汇总为一些启发:我将以下窗口配置与netrw一起使用(与:let g:netrw_liststyle = 2一起使用):


    -------------------------------- ...
    Netrw-split: topleft spilt
    -------------------------------- ...
             |          |          |
    working  | working  | working  |
    window 1 | window 2 | window 3 | ...
             |          |          |

因此,我可以从其他每个窗口直接进入Netrw-split。然后我放到我的.vimrc中:


    augroup netrw
        autocmd!
        autocmd WinLeave * if &ft !=# "netrw" | let g:netrw_chgwin = winnr() | endif
        autocmd filetype netrw call Netrw_mappings()
    augroup END

WinLeave命令将全局g:netrw_chgwin变量设置为刚刚离开的窗口(除非我们位于netrw窗口中)。因此netrw会在我访问过的窗口中打开任何文件,并且由于窗口的布局,我可以从任何其他窗口访问netrw。

autocmd的“文件类型”也用于在我访问netrw的窗口中创建一个新文件。为此,必须覆盖netrw的'%'命令:


    function! Netrw_mappings()
        noremap <buffer>% :call CreateInLastWindow()<cr>
    endfunction

具有在g:netrw_chgwin窗口中创建新文件的功能:


    function! CreateInLastWindow()
        let l:filename = input("new file's name: ")
        let l:netrwdir = b:netrw_curdir
        execute g:netrw_chgwin . "wincmd w"
        execute 'edit ' . l:netrwdir.'/'.l:filename
    endfunction