Réglage netrw comme NERDTree
J'ai utilisé
nmap <silent> <f2> :NERDTreeToggle<cr>
pour basculer nerdtree fenêtre. Comment puis-je faire la même chose avec netrw?La fenêtre NERDTree n'est pas affichée dans la liste tampon (
:ls
). netrw est répertorié dans la liste tampon. Comment puis-je le faire non répertorié?:bn
commande fonctionne mais:bp
commande ne fonctionne pas dans le netrw fenêtre. Est-ce un bug?
5 réponses
La commande 'Vexplore' ouvre un navigateur de répertoire vertical. Vous pouvez construire sur cela en ajoutant le code suivant à votre .fichier vimrc pour basculer le navigateur vertical avec Ctrl-E (par exemple):
" Toggle Vexplore with Ctrl-E
function! ToggleVExplorer()
if exists("t:expl_buf_num")
let expl_win_num = bufwinnr(t:expl_buf_num)
if expl_win_num != -1
let cur_win_nr = winnr()
exec expl_win_num . 'wincmd w'
close
exec cur_win_nr . 'wincmd w'
unlet t:expl_buf_num
else
unlet t:expl_buf_num
endif
else
exec '1wincmd w'
Vexplore
let t:expl_buf_num = bufnr("%")
endif
endfunction
map <silent> <C-E> :call ToggleVExplorer()<CR>
Le code ci-dessus essaie d'ouvrir la fenêtre de L'Explorateur sur le côté gauche de l'écran à tout moment; je l'utilise avec plusieurs fenêtres verticales fendues ouvertes.
[facultatif] vous pouvez ajouter les lignes suivantes à votre .vimrc pour améliorer l'expérience de navigation:
" Hit enter in the file browser to open the selected
" file with :vsplit to the right of the browser.
let g:netrw_browse_split = 4
let g:netrw_altv = 1
" Change directory to the current buffer when opening files.
set autochdir
En commençant par netrw
v150, il y a :Lexplore
, qui va basculer une fenêtre netrw
sur le côté gauche.
Je viens de faire quelques améliorations sur la solution de Nick qui corrige:
- ouvre une fenêtre haute de 100% (indépendante des fenetres divisées)
-
:Lexplore
ouvre sur le côté gauche,:Lexplore!
sur la droite - listant le répertoire du fichier courant (même sur les répertoires distants)
Mettez ces lignes à la fin de votre .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
Options suggérées pour se comporter comme NERDTree:
" absolute width of netrw window
let g:netrw_winsize = -28
" do not display info on the top of window
let g:netrw_banner = 0
" tree-view
let g:netrw_liststyle = 3
" sort is affecting only: directories on the top, files below
let g:netrw_sort_sequence = '[\/]$,*'
" use the previous window to open file
let g:netrw_browse_split = 4
En fait,
let g:netrw_browse_split = 4
let g:netrw_altv = 1
Fonctionne le mieux pour moi.
*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.
Je pense que le meilleur comportement est décrit par l'option 4. En appuyant sur Entrée, le fichier est ouvert sur l'autre division, en évitant une surpopulation de divisions.
Fonction basculante
Voici ma version de la fonction toggle, basée sur la réponse de Nick. Maintenant, vous pouvez utiliser le raccourci clavier depuis n'importe quel volet, pas seulement depuis le volet de netrw. Dans la version de Nick, il provoque une erreur, j'ai également fait un nettoyage de code et le remapper à Ctrl-O, car Ctrl-E est utilisé par défaut pour faire défiler d'une ligne vers le bas.
" 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>
La Variable "t: expl_buf_num" est globale pour l'onglet actuel, vous pouvez donc avoir un explorateur par onglet. Vous pouvez le changer en "w: expl_buf_num" si vous voulez pouvoir ouvrez l'Explorateur dans chaque fenêtre.
Gardez le focus dans L'Explorateur
Aussi, j'aime avoir cela à mon .vimrc:
" Open file, but keep focus in Explorer
autocmd filetype netrw nmap <c-a> <cr>:wincmd W<cr>