Nerdtree: Navegador de ficheros

Nerdtree está muy difundido, hay muchos otros gestores/navegadores de ficheros pero Nerdtree funciona muy bien y no he econtrado ningún otro que me ofrezca ventajas sobre este.

Instalación

Agregar en nuestro bloque de plugins en vimrc

Plugin 'scrooloose/nerdtree'

Enlace:
https://github.com/valsorym/scrooloose-nerdtree

Características:

  • navegar por rutas de directorio
  • permite búsqueda como si fuera un buffer cualquiera
  • operar con ficheros y directorios ( lo que Nerdtree llama nodos )
  • permite hacer bookmarks de ficheros y/o directorios

Operaciones destacadas

  • ? para ‘togglear’ la ayuda
  • enter para collapsar o expandir un árbol
  • ‘m’ para el menú de manipulación de ficheros o directorios, Nerdtree los llama nodos. Te permite borrar, renombar, crear, etc… sin tener que salir a la terminal
  • t/T para abrir en un nuevo tab. t abre tab y mueve el cursor al tab y T abre tab pero el cursor permanece en nerdtree
  • Para abrir ficheros puedes usar el comando ‘g’ + o/i/s que es un preview y el modo de mostrarlo. El concepto de preview es que te abre el contenido en un buffer y mantiene el cursor en el arbol de NerdTree, esto es útil si quieres ojear ficheros rápidamente sin tener que desplazar el cursor al bufer y volver a Nerdtree, te ahorras pulsaciones de teclado.
  • go / o. Previsualizar/abrir en el buffer actual
  • gi / i . Previsualiza/abre fichero spliteando el buffer actual en horizontal
  • gs / s . Previsualiza/abre fichero spliteando el buffer actual en vertical
  • e . Explore, abre el nodo de directorios actual en otro buffer para que puedas separar la visualización de los directorios.
  • ‘m’ es el menu de operaciones con nodos
NERDTree Menu. Use j/k/enter, or the shortcuts indicated   
=========================================================  
> (a)dd a childnode                                        
  (m)ove the current node                                  
  (d)elete the current node                                
  (r)eveal the current node in file manager                
  (o)pen the current node with system editor               
  (c)opy the current node                                  
  copy (p)ath to clipboard                                 
  (l)ist the current node                                  
  Run (s)ystem command in this directory                   
                                                           

VundleVim: gestor de plugins

Mi vimrc usa VundleVim como gestor de plugins, dentro del bloque de Vundle, hay que agregar lineas con Plugin seguido de la fuente del plugin. Puede ser una url completa o un path de github.

Enlace

https://github.com/VundleVim/Vundle.vim

Instalación

" Vundle start plugin            
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()              

Plugin 'VundleVim/Vundle.vim'

call vundle#end() " required

Una vez que tenemos estas lineas en nuestro vimrc ya podemos instalar y actualizar plugins. Hay dos formas desde linea de comandos o desde el propio vim

" Desde vim 
:PluginInstall
:PluginUpdate

" Desde linea de comandos
$ vim +PluginInstall
$ vim +PluginUpdate

Cómo uso VIM como IDE para programar en Python I

Desde hace varios años trabajo habitualmente con VIM, es una herramienta muy potente con muchas ventajas pero también con muchos incovenientes.

A lo largo de estos años he pasado por diversas etapas y cada día aparecen nuevos plugins o incorporo mejoras que me hacen la vida más fácil. El objetivo de esta serie de posts es comentaros cómo trabajo actualmente, qué uso, plugins, keybindings, etc… y por qué los uso.

Una de las dificultades a la hora de usar VIM es que hay multitud de plugins, todos parecen funcionar bien y muchos hacen lo mismo, identificar cuál es el más apropiado para cada uno y configurarlo correctamente a veces es laborioso. Espero que compartiendo mi experiecia pueda ayudar a otras personas a reducir esa frustración y conseguir una mejor experiencia al entrar al mundo VIM.

Como referencia mi vimrc ( ~/.vimrc ) lo tengo publicado en https://gitlab.com/jsenin/vimrc intento documentar lo mejor posible los cambios que hago, lo mantengo bastante actualizado.

Una de las ventajas de VIM es que puedo poner en funcionamiento mi entorno de trabajo en unos pocos minutos, clonando mi fichero, actualizar plugins e instalar algún paquete de sistema, es suficiente y muy muy rápido. La portabilidad del entorno de trabajo de una forma muy cómoda y rápida para mí es una gran ventaja.

La forma en que yo actualizo mi vimrc está documentada en https://gitlab.com/jsenin/vimrc/-/blob/master/README.md pero lo realmente necesario es saber que toda tu configuración está en el fichero ~/.vimrc

usa :q para salir de vim

vim soporte de portapapeles en entornos X

Por defecto en Debian, el paquete vim no soporta copiar y pegar texto de forma que se use el portapapeles para el entorno gráfico. Esto es debido a que vim puede ser compilado con una gran cantidad de opciones distintas, y para ello disponemos de muchos paquetes que actualizarán el binario con más o menos opciones activadas.

En este caso, necesitamos activar ‘clipboard’, pero… ¿ cómo podemos ver las opciones activas de nuestro vim ? con vim --version

$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 17 2016 06:26:47)
Included patches: 1-488, 576
Extra patches: 8.0.0056
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by jamessan@debian.org
Huge version with GTK2 GUI. Features included (+) or not (-):
+acl +farsi +mouse_netterm +syntax
+arabic +file_in_path +mouse_sgr +tag_binary
+autocmd +find_in_path -mouse_sysmouse +tag_old_static
+balloon_eval +float +mouse_urxvt -tag_any_white
+browse +folding +mouse_xterm +tcl
++builtin_terms -footer +multi_byte +terminfo
+byte_offset +fork() +multi_lang +termresponse
+cindent +gettext -mzscheme +textobjects
+clientserver -hangul_input +netbeans_intg +title
+clipboard +iconv +path_extra +toolbar
+cmdline_compl +insert_expand +perl +user_commands
+cmdline_hist +jumplist +persistent_undo +vertsplit
+cmdline_info +keymap +postscript +virtualedit
+comments +langmap +printer +visual
+conceal +libcall +profile +visualextra
+cryptv +linebreak +python +viminfo
+cscope +lispindent -python3 +vreplace
+cursorbind +listcmds +quickfix +wildignore
+cursorshape +localmap +reltime +wildmenu
+dialog_con_gui +lua +rightleft +windows
+diff +menu +ruby +writebackup
+digraphs +mksession +scrollbind +X11
+dnd +modify_fname +signs -xfontset
-ebcdic +mouse +smartindent +xim
+emacs_tags +mouseshape -sniff +xsmp_interact
+eval +mouse_dec +startuptime +xterm_clipboard
+ex_extra +mouse_gpm +statusline -xterm_save
+extra_search -mouse_jsbterm -sun_workshop +xpm
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
system gvimrc file: "$VIM/gvimrc"
user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
system menu file: "$VIMRUNTIME/menu.vim"
fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -I/usr/include/tcl8.6 -D_REENTRANT=1 -D_THREAD_SAFE=1 -D_LARGEFILE64_SOURCE=1
Linking: gcc -L. -Wl,-z,relro -L/home/pere/src/debian/ruby/ruby2.1/debian/lib -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,-E -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -ldl -L/usr/lib -llua5.2 -Wl,-E -fstack-protector -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu/perl/5.20/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python2.7/config-x86_64-linux-gnu -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions -L/usr/lib/x86_64-linux-gnu -ltcl8.6 -ldl -lz -lpthread -lieee -lm -lruby-2.1 -lpthread -lgmp -ldl -lcrypt -lm

Para afinar un poco más :

$ vim --version | grep clipboard
+clipboard +iconv +path_extra +toolbar
+eval +mouse_dec +startuptime +xterm_clipboard

En este caso vemos ‘+clipboard‘ por lo que tengo la opción activada. Si no es así podemos instalar el paquete gtk para activar el soporte
apt-get install vim-gtk

Ahora ya podemos entrar a vim, escribir algo y probar a seleccionar texto y utilizar las combinaciones típicas de copiar y pegar entre vim y otra aplicación. Si no es posible copiar el texto, podemos mapear la combinación de teclas ‘control+shift+c’ en vim de la siguiente manera:

vmap <C-S-C> "y+<CR>"

… y ya podemos hacer copy+paste de vim a cualquier otro sitio. Recuerda que puedes hacer el mapping persistente en tu ~/.vimrc