Navegación de Archivos y Exploración
La navegación eficiente de archivos es fundamental para trabajar productivamente en proyectos grandes. Vim ofrece múltiples formas de explorar y navegar por tu sistema de archivos, desde herramientas integradas hasta plugins especializados.
🗂️ Explorador Nativo: Netrw
Vim incluye Netrw, un explorador de archivos integrado que es sorprendentemente potente.
Abrir Netrw
:Explore " Explorar directorio del archivo actual (:E)
:Sexplore " Explorar en división horizontal (:Sex)
:Vexplore " Explorar en división vertical (:Vex)
:Texplore " Explorar en nueva pestaña (:Tex)
Navegación en Netrw
<Enter> " Entrar a directorio o abrir archivo
- " Subir al directorio padre
u " Subir en historial de directorios
U " Bajar en historial de directorios
gb " Ir al directorio bookmarked
Operaciones de archivos
d " Crear directorio
D " Eliminar archivo/directorio
R " Renombrar archivo
% " Crear nuevo archivo
p " Vista previa de archivo
o " Abrir archivo en nueva ventana horizontal
v " Abrir archivo en nueva ventana vertical
t " Abrir archivo en nueva pestaña
Vistas de Netrw
i " Cambiar entre vistas (tree, long, wide, thin)
s " Cambiar criterio de ordenamiento
r " Invertir orden
Configuración de Netrw
" En tu .vimrc
let g:netrw_banner = 0 " Ocultar banner
let g:netrw_liststyle = 3 " Vista de árbol
let g:netrw_browse_split = 4 " Abrir en ventana anterior
let g:netrw_altv = 1 " Abrir splits a la derecha
let g:netrw_winsize = 25 " Ancho del explorador
let g:netrw_list_hide = '\(^\|\s\s\)\zs\.\S\+' " Ocultar archivos ocultos
🔍 Búsqueda de Archivos
Find nativo
:find archivo.txt " Buscar archivo en 'path'
:find **/*test* " Buscar con wildcards
Configurar path para find
" En .vimrc
set path+=** " Buscar recursivamente
set wildmenu " Mejor autocompletado
set wildignore+=*/node_modules/*,*/build/*,*.pyc
Tags para navegación
" Generar tags
:!ctags -R .
" Navegar con tags
Ctrl-] " Ir a definición
Ctrl-t " Volver de definición
:tag función " Ir a tag específico
:tags " Ver stack de tags
🚀 Plugins de Navegación
1. fzf.vim (Recomendado)
Instalación con vim-plug:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Comandos principales:
:Files " Buscar archivos
:GFiles " Buscar archivos en Git
:Buffers " Buscar entre buffers
:Rg " Buscar contenido (requiere ripgrep)
:Lines " Buscar líneas en buffers
:History " Historial de archivos
Configuración recomendada:
" Atajos para fzf
nnoremap <Leader>f :Files<CR>
nnoremap <Leader>b :Buffers<CR>
nnoremap <Leader>g :GFiles<CR>
nnoremap <Leader>r :Rg<CR>
nnoremap <Leader>l :Lines<CR>
nnoremap <Leader>h :History<CR>
" Ventana de fzf en popup
let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } }
2. NERDTree
Instalación:
Plug 'preservim/nerdtree'
Comandos básicos:
:NERDTree " Abrir NERDTree
:NERDTreeToggle " Alternar NERDTree
:NERDTreeFind " Encontrar archivo actual
Navegación en NERDTree:
o " Abrir archivo/directorio
go " Abrir archivo sin mover cursor
t " Abrir en nueva pestaña
T " Abrir en nueva pestaña sin cambiar
i " Abrir en split horizontal
gi " Abrir en split horizontal sin mover cursor
s " Abrir en split vertical
gs " Abrir en split vertical sin mover cursor
Configuración:
" Toggle NERDTree
nnoremap <Leader>n :NERDTreeToggle<CR>
nnoremap <Leader>nf :NERDTreeFind<CR>
" Configuración
let NERDTreeShowHidden=1
let NERDTreeQuitOnOpen=1
let NERDTreeMinimalUI=1
3. Ranger.vim
Para usuarios de Ranger:
Plug 'francoiscabrol/ranger.vim'
4. Telescope (para Neovim)
Solo para referencia, ya que nos enfocamos en Vim clásico:
-- Solo en Neovim
require('telescope').setup{}
📝 Ejercicios Prácticos
Ejercicio 1: Exploración básica con Netrw
- Abre Vim en el directorio de un proyecto
- Usa
:Explore
para abrir Netrw - Navega por diferentes directorios
- Cambia entre vistas con
i
- Crea un archivo nuevo con
%
- Crea un directorio con
d
Ejercicio 2: Búsqueda con find
- Configura
path
para incluir subdirectorios - Usa
:find
para buscar archivos específicos - Practica con wildcards:
:find **/*test*
- Usa tab para autocompletar nombres
Ejercicio 3: Workflow con fzf (si está instalado)
- Instala fzf.vim siguiendo las instrucciones
- Usa
:Files
para búsqueda rápida - Prueba
:GFiles
en un repositorio Git - Busca contenido con
:Rg
(requiere ripgrep) - Navega por buffers con
:Buffers
Ejercicio 4: Tags para navegación
- En un proyecto con código, genera tags:
:!ctags -R .
- Posiciónate sobre una función y presiona
Ctrl-]
- Usa
Ctrl-t
para volver - Prueba
:tag nombre_función
🎯 Workflows Recomendados
Workflow 1: Solo herramientas nativas
" Configuración para navegación nativa eficiente
set path+=**
set wildmenu
set wildignore+=*/node_modules/*,*/build/*,*.pyc
" Atajos útiles
nnoremap <Leader>e :Explore<CR>
nnoremap <Leader>f :find **/*
nnoremap <Leader>b :buffers<CR>:buffer<Space>
Workflow 2: Con fzf
" Búsqueda ultra-rápida con fzf
nnoremap <C-p> :Files<CR>
nnoremap <C-b> :Buffers<CR>
nnoremap <C-f> :Rg<CR>
Workflow 3: Con NERDTree sidebar
" Panel lateral persistente
nnoremap <F2> :NERDTreeToggle<CR>
autocmd VimEnter * NERDTree | wincmd p
⚙️ Configuración Avanzada
Ignorar archivos específicos
" Para find nativo
set wildignore+=*.o,*~,*.pyc
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*
set wildignore+=*/node_modules/*,*/bower_components/*
set wildignore+=*/tmp/*,*.so,*.swp,*.zip
" Para Netrw
let g:netrw_list_hide= '.*\.pyc$,.*\.o$,.*\.so$,.*\.swp$,.*\.zip$'
Abrir archivos recientes
" Función personalizada para archivos recientes
function! s:MRU()
for file in v:oldfiles[0:9]
if filereadable(file)
echo fnamemodify(file, ':~:.')
endif
endfor
endfunction
command! MRU call s:MRU()
Navegación rápida con marcas
" Atajos para marcas globales
nnoremap <Leader>ma :marks<CR>
nnoremap <Leader>mg mG " Marcar como G (global)
nnoremap <Leader>mc mC " Marcar como C (config)
nnoremap <Leader>mt mT " Marcar como T (test)
🏆 Tips Pro
1. Combina herramientas
" Usar find + grep para búsqueda poderosa
:vimgrep /patrón/j **/*.py | copen
2. Sesiones para proyectos
" Guardar y restaurar estado completo
:mksession! proyecto.vim
vim -S proyecto.vim
3. Argumentos de línea de comandos
# Abrir múltiples archivos
vim $(find . -name "*.py" | head -10)
# Con patrones
vim **/*.js
4. Integración con herramientas externas
" Usar find del sistema
:!find . -name "*.py" -exec vim {} +
5. Bookmarks en Netrw
" En Netrw, usar 'mb' para bookmarkar
" Usar 'gb' para ir a bookmark
🔧 Troubleshooting
Problemas comunes
Find no encuentra archivos
" Verificar configuración de path
:set path?
" Agregar directorios específicos
:set path+=src/**,tests/**
Netrw muy lento
" Deshabilitar plugins innecesarios
let g:loaded_netrwPlugin = 1
fzf no funciona
# Instalar dependencias
brew install fzf ripgrep # macOS
apt install fzf ripgrep # Ubuntu
📚 Recursos Adicionales
:help netrw
- Documentación completa de Netrw:help find
- Documentación del comando find:help path
- Configuración de rutas de búsqueda- fzf.vim GitHub - Documentación de fzf.vim
¡La navegación eficiente de archivos es clave para la productividad! Experimenta con diferentes métodos y encuentra el workflow que mejor se adapte a tu estilo de trabajo.