Vim nivel medio: Simulando un IDE (sin plugins)
En esta publicación vamos usar todo lo que aprendiste sobre el uso de Pestañas y Ventanas en Vim.
Vamos a modificar un poco el comportamiento de Vim para que lo puedas usar acercándonos a lo que puedes realizar mediante un IDE, para facilitar el trabajo de edición con Vim.
Todo lo vamos a realizar sin plugins, simplemente editando el fichero de configuración por defecto de vim, el fichero .vimrc
Os dejo mi configuración de VIM (~/.vimrc) en la que está comentada lo que hace cada una de las lineas del fichero:
" --------------- VIM Personalizado (luisgulo) ------------------
set nocompatible " Permitir opciones VIM (y no solo de VI)
set number " Mostrar numeros de linea
set numberwidth=1 " Reservar N posiciones para num de linea
"set mouse=a " Activar soporte de raton para situarse o cambiarse de ventana (para mi comentado)
set clipboard=sin_nombre " Fijar nombre al portapapeles
syntax on " Activar coloreado de sintaxis
set showcmd " Ver historial de comandos usados en vim
set ruler " Permitir reglas en partes de vim
"set cursorline " Mostrar linea actual como subrayada (para mi comentado)
set encoding=utf-8 " Permitir caracteres UTF-8
set showmatch " Reduce el uso de % para las busquedas
"set relativenumber " Mostrar posiciones relativas para saltos de linea (para mi comentado)
set background=dark " Fondo oscuro
set noshowmode " No mostrar el modo de Vim (edicion, visual, ....)
set hlsearch " Resaltar lo encontrado en la busqueda
set incsearch " Busqueda incremental
" --------------- Tabulaciones ------------------------------------
set sw=2 " Tabulacion 'blanda' espacios
set tabstop=2 " Tabulacion son 2 espacios
set expandtab " Transformar tabuladores en espacios
set listchars=multispace:\ \ ┊ " Dibujar simbolo ┊ para mostrar las tabulaciones (con espacios)
set listchars=tab:\┊\ " Dibujar simbolo ┊ para mostrar las tabulaciones (con tabuladores)
set list " Activar los simbolos anteriores
" ------------- Uso de navegación con el punto (.) => Apertura de directorio
let g:netrw_banner = 0 " Eliminar banner al mostrar directdorio
let g:netrw_liststyle = 3 " Estilo de vista de directorio: 1-thin 2-long 3-wide 4-tree
let g:netrw_browse_split = 3 " Abrir nuevo fichero al navegar en: 1-Horizontal 2-Vertical 3-Pestaña 4-Ventana previa
let g:netrw_altv = 1 " Mostrar navegador en modo Vertical
let g:netrw_winsize = 23 " Ancho navegador directorio: 20%
" ----------------- INICIO MOSTAR LINEA ESTADO PERSONALIZADA ------
" Colores por defecto para la linea de estado (letra azul/fondo blanco)
hi StatusLine ctermbg=blue ctermfg=white
set laststatus=2 " Mostrar/Reservar 2 filas en la linea de estado
set statusline=%t " Mostrar el nombre del fichero
set statusline+=\ %y " Mostrar el tipo del fichero
" Variable para almacenar la rama actual (si hay alguna)
let rama = system("git branch --color=never --no-column --show-current 2>/dev/null | tr -d '\n'")
" Escribir la rama en la linea de estado
execute "set statusline+=\\ Rama:" . rama
set statusline+=\ Linea:%l:%L " Mostar linea actual
set statusline+=\ Columna:%c " Mostrar columna actual
set statusline+=%* " Finalizar la linea de estado
" --------------- FIN Vim personalizado (luisgulo) ------------------
Nota: En Vim todos los comentarios se identifican con comillas dobles (")
Forma de trabajo usando el navegador de Vim
Si nos cambiamos a un directorio con el que queramos trabajar (en este caso estoy en una carpeta que es un repositorio de Git), escribimos simplemente vim y pulsamos Intro.
Nos aparece la ventana estandar de Vim, en la que podemos usar el comando de apertura del navegador 'explore' que tiene Vim, para ello usamos el comando:
# Abrir explorador de Vim en ruta actual (.)
ESC :Vexplore .
# Sintaxis abreviada del comando anterior
ESC :Ve .
Moviendose y Seleccionando en el navegador de Vim
Un resumen rápido de las teclas que puedes usar:
- Flechas de dirección: Subir y bajar en la lista de ficheros y directorios
- Intro: Sobre un fichero lo abre directamente (pestaña o ventana)
- Intro: Sobre un directorio abre/despliega el directorio
- Intro: Sobre los dos puntos (../) va al directorio superior
Por mi configuración cada vez que selecciono un fichero se abre en una nueva Pestaña. Pero tambien puedo forzar a abrirlo en la ventana deseada.
En la siguiente captura, navegador de Vim y ficheros abiertos en Pestañas y Ventanas:
Para cerrar el navegador, simplemente cambia a esa ventana y puedes usar la combinacion de teclas Ctrl+W C
para cerrar esa ventana.
Inicio y cierre de llaves, corchetes, paréntesis y comillas
Podemos aún mejorar la manera de trabajar con el editor.
Podemos indicarle al editor que cada vez que usemos una llave, corchete o comillas, Vim automaticamente nos escriba su correspondiente cierre, para incluir esto, sin ningún tipo de plugin, simplemente edita de nuevo tu fichero ~/.vimrc e incluye las siguiente líneas en él:
" ------- Cerrado automatico de llaves/corchetes/etc -----------
inoremap { {}<Esc>ha
inoremap ( ()<Esc>ha
inoremap [ []<Esc>ha
inoremap " ""<Esc>ha
inoremap ' ''<Esc>ha
inoremap ` ``<Esc>ha
Activando auto-completado de lenguajes
Vim incorpora una serie de lenguajes de programación sin necesidad de uso de plugins para autocompletar a la hora de escribir.
Puedes saber que lenguajes tienes soportados escribiendo:
find /usr/share/vim -iname "*complete*.vim" -exec basename {} \;
# La salida puede ser algo así:
xmlcomplete.vim
htmlcomplete.vim
pythoncomplete.vim
haskellcomplete.vim
sqlcomplete.vim
python3complete.vim
rubycomplete.vim
adacomplete.vim
phpcomplete.vim
clojurecomplete.vim
csscomplete.vim
ccomplete.vim
javascriptcomplete.vim
contextcomplete.vim
syntaxcomplete.vim
Puedes activar cualquiera de los lenguajes encontrados simplemente ejecutando el siguiente comando en Vim:
" Sintaxis para HTML
:set omnifunc=htmlcomplete#CompleteTags
" Sintaxis para CSS
:set omnifunc=csscomplete#CompleteCSS
" Sintaxis para JavaScript
:set omnifunc=javascriptcomplete#CompleteJS
" Sintaxis para PHP
:set omnifunc=phpcomplete#CompletePHP
" Sintaxis para Python 3
:set omnifunc=python3complete#Complete
" Activar sintaxis completa
:set omnifunc=syntaxcomplete#Complete
Una vez activado el autocompletado del lenguaje deseado, simplemente empieza a escribir y pulsa Ctrl+X
Ctrl+O
Por ejemplo si activamos el autocompletado para HTML en cuando escribamos el principio de una etiqueta y pulsemos la combinacion de teclas, se desplegarán automaticamente las opciones disponibles, simplemente nos desplazamos con las teclas hasta la etiqueta deseada y pulsaremos Intro.
Para anular la selección bastará simplemente con pulsar ESC
o Ctrl+U
para eliminar la inserción antes de aceptar.