Vim 设置netrw-like NERDTree

Vim 设置netrw-like NERDTree,vim,netrw,Vim,Netrw,我使用nmap:nerdtreetobggle切换nerdtree窗口。如何使用netrw实现同样的功能 缓冲区列表中未显示nerdtree窗口(:ls)。netrw列在缓冲区列表中。我怎样才能使它不被列出 :bn命令起作用,但在netrw窗口中,:bp命令不起作用。这是虫子吗 “Vexplore”命令打开垂直目录浏览器。通过将以下代码添加到.vimrc文件中以使用Ctrl-E切换垂直浏览器(例如),可以在此基础上进行构建: 其实 let g:netrw_browse_split = 4 let

我使用
nmap:nerdtreetobggle
切换nerdtree窗口。如何使用netrw实现同样的功能

  • 缓冲区列表中未显示nerdtree窗口(
    :ls
    )。netrw列在缓冲区列表中。我怎样才能使它不被列出

  • :bn
    命令起作用,但在netrw窗口中,
    :bp
    命令不起作用。这是虫子吗


  • “Vexplore”命令打开垂直目录浏览器。通过将以下代码添加到.vimrc文件中以使用Ctrl-E切换垂直浏览器(例如),可以在此基础上进行构建:

    其实

    let g:netrw_browse_split = 4
    let g:netrw_altv = 1
    
    最适合我

     *g:netrw_browse_split* when browsing, <cr> will open the file by:
                    =0: re-using the same window
                    =1: horizontally splitting the window first
                    =2: vertically   splitting the window first
                    =3: open file in new tab
                    =4: act like "P" (ie. open previous window)
                        Note that |g:netrw_preview| may be used
                        to get vertical splitting instead of
                        horizontal splitting.
    
    *g:netrw\u browse\u split*浏览时,将通过以下方式打开文件:
    =0:重新使用同一窗口
    =1:首先水平拆分窗口
    =2:首先垂直拆分窗口
    =3:在新选项卡中打开文件
    =4:表现得像“P”(即打开上一个窗口)
    请注意,可以使用| g:netrw|u preview |
    要获得垂直拆分而不是
    水平分割。
    

    我认为选项4描述了最佳行为。通过按enter键,文件在另一个拆分上打开,避免拆分过多。

    netrw
    v150开始,有
    :Lexplore
    ,它将切换左侧的
    netrw
    窗口。

    我刚刚做了一些改进,修复了以下问题:

    • 打开100%高的窗口(独立于窗口拆分)
    • :Lexplore
      在左侧打开它,
      :Lexplore在右边
    • 列出当前文件的目录(甚至在远程目录上)
    将这些行放在.vimrc的末尾:

    com!  -nargs=* -bar -bang -complete=dir  Lexplore  call netrw#Lexplore(<q-args>, <bang>0)
    
    fun! Lexplore(dir, right)
      if exists("t:netrw_lexbufnr")
      " close down netrw explorer window
      let lexwinnr = bufwinnr(t:netrw_lexbufnr)
      if lexwinnr != -1
        let curwin = winnr()
        exe lexwinnr."wincmd w"
        close
        exe curwin."wincmd w"
      endif
      unlet t:netrw_lexbufnr
    
      else
        " open netrw explorer window in the dir of current file
        " (even on remote files)
        let path = substitute(exists("b:netrw_curdir")? b:netrw_curdir : expand("%:p"), '^\(.*[/\\]\)[^/\\]*$','\1','e')
        exe (a:right? "botright" : "topleft")." vertical ".((g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize) . " new"
        if a:dir != ""
          exe "Explore ".a:dir
        else
          exe "Explore ".path
        endif
        setlocal winfixwidth
        let t:netrw_lexbufnr = bufnr("%")
      endif
    endfun
    
    " ---------------------------------------------------------------
    
    " File Explorer start
    
    let g:netrw_banner = 0
    let g:netrw_liststyle = 3
    let g:netrw_browse_split = 4
    let g:netrw_altv = 1
    let g:netrw_winsize = 15
    
    " Toggle Vexplore with F9
    
    map <silent> <F9> :Lexplore<CR>
    
    " File Explorer end
    
    " ---------------------------------------------------------------
    
    切换功能 这是我的切换函数版本,基于Nick的答案。现在,您可以在任何窗格中使用热键,而不仅仅是在netrw的窗格中。在Nick的版本中,它会导致一个错误,我也做了一些代码清理并将其重新映射到Ctrl-O,因为默认情况下使用Ctrl-E向下滚动一行

    " Toggle Vexplore with Ctrl-O
    function! ToggleVExplorer()
        if exists("t:expl_buf_num")
            let expl_win_num = bufwinnr(t:expl_buf_num)
            let cur_win_num = winnr()
    
            if expl_win_num != -1
                while expl_win_num != cur_win_num
                    exec "wincmd w"
                    let cur_win_num = winnr()
                endwhile
    
                close
            endif
    
            unlet t:expl_buf_num
        else
             Vexplore
             let t:expl_buf_num = bufnr("%")
        endif
    endfunction
    
    map <silent> <C-O> :call ToggleVExplorer()<CR>
    
    “使用Ctrl-O切换Vexplore
    函数!ToggleVExplorer()
    如果存在(“t:expl_buf_num”)
    让expl_win_num=bufwinnr(t:expl_buf_num)
    让cur_win_num=winnr()
    如果expl\u win\u num!=-1
    而expl\u win\u num!=cur\u win\u num
    执行官“wincmd w”
    让cur_win_num=winnr()
    循环结束
    关闭
    恩迪夫
    取消设置t:expl_buf_num
    其他的
    维克斯普洛尔
    设t:expl_buf_num=bufnr(“%”)
    恩迪夫
    端功能
    映射:调用ToggleVExplorer()
    
    变量“t:expl\u buf\u num”是当前选项卡的全局变量,因此每个选项卡可以有一个资源管理器。如果希望能够在每个窗口中打开资源管理器,可以将其更改为“w:expl\u buf\u num”

    在浏览器中保持焦点 另外,我喜欢在我的.vimrc上有这个:

    " Open file, but keep focus in Explorer
    autocmd filetype netrw nmap <c-a> <cr>:wincmd W<cr>
    
    “打开文件,但在资源管理器中保持焦点。”
    autocmd文件类型netrw nmap:wincmd W
    
    “使用Ctrl-E切换Vexplore
    函数!ToggleVExplorer()
    词汇库
    垂直调整30
    端功能
    映射:调用ToggleVExplorer()
    

    简化

    作为一种与类似且更简单的方法,您可以在.vimrc中使用F9将其切换(并且非常像NERDTree):

    com!  -nargs=* -bar -bang -complete=dir  Lexplore  call netrw#Lexplore(<q-args>, <bang>0)
    
    fun! Lexplore(dir, right)
      if exists("t:netrw_lexbufnr")
      " close down netrw explorer window
      let lexwinnr = bufwinnr(t:netrw_lexbufnr)
      if lexwinnr != -1
        let curwin = winnr()
        exe lexwinnr."wincmd w"
        close
        exe curwin."wincmd w"
      endif
      unlet t:netrw_lexbufnr
    
      else
        " open netrw explorer window in the dir of current file
        " (even on remote files)
        let path = substitute(exists("b:netrw_curdir")? b:netrw_curdir : expand("%:p"), '^\(.*[/\\]\)[^/\\]*$','\1','e')
        exe (a:right? "botright" : "topleft")." vertical ".((g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize) . " new"
        if a:dir != ""
          exe "Explore ".a:dir
        else
          exe "Explore ".path
        endif
        setlocal winfixwidth
        let t:netrw_lexbufnr = bufnr("%")
      endif
    endfun
    
    " ---------------------------------------------------------------
    
    " File Explorer start
    
    let g:netrw_banner = 0
    let g:netrw_liststyle = 3
    let g:netrw_browse_split = 4
    let g:netrw_altv = 1
    let g:netrw_winsize = 15
    
    " Toggle Vexplore with F9
    
    map <silent> <F9> :Lexplore<CR>
    
    " File Explorer end
    
    " ---------------------------------------------------------------
    
    ”---------------------------------------------------------------
    “文件资源管理器启动
    设g:netrw_banner=0
    设g:netrw_liststyle=3
    设g:netrw\u browse\u split=4
    设g:netrw_altv=1
    设g:netrw_winsize=15
    “使用F9切换Vexplore
    地图:Lexplore
    “文件资源管理器结束
    " ---------------------------------------------------------------
    
    在发布问题或答案之前,不要忘记查看预览。你缺少所有的
    结构。我会用“调整大小”来补充/组合Nicks的答案是的-我现在自己做了,并相应地更新了我的答案。太棒了!谢谢。打开文件并切换(关闭)后,第7行出现错误:
    E16:无效范围:2wincmd w
    ,Vim 8.0.4。有什么解决方法吗?打开文件后,切换会出现错误:
    第8行:E16:无效范围:2wincmd w
    。事实上,当浏览器不是活动窗口时,每当切换时都会出现错误。VIM8可能存在一些问题?如果您想要基于文件类型的突出显示,请检查“伟大的解决方案”!在呈现NETRW窗格之前,您是否注意到文件内容的闪烁?你知道会发生什么吗?再次感谢@贝托哈雷斯这可能是因为维姆的钟。下面是如何停用它(将它设置为“可视”,然后告诉它什么也不做)
    set visualbell
    set t_vb=
    我喜欢你的函数,已经用了一段时间了!然而,您不想重新映射,这与(我经常使用的一对映射)相反。最后,在任何文件类型中重新映射,请尝试!美好的比自定义函数好得多。
    " Toggle Vexplore with Ctrl-E
    
    function! ToggleVExplorer()
          Lexplore
          vertical resize 30
    endfunction
    map <silent> <C-E> :call ToggleVExplorer()<CR>
    
    " ---------------------------------------------------------------
    
    " File Explorer start
    
    let g:netrw_banner = 0
    let g:netrw_liststyle = 3
    let g:netrw_browse_split = 4
    let g:netrw_altv = 1
    let g:netrw_winsize = 15
    
    " Toggle Vexplore with F9
    
    map <silent> <F9> :Lexplore<CR>
    
    " File Explorer end
    
    " ---------------------------------------------------------------