Vim nivel medio: Simulando un IDE (sin plugins)

Linux Nivel Medio 18 de jun. de 2023

En esta publicación vamos usar todo lo que aprendiste sobre el uso de Pestañas y Ventanas en Vim.

Vim nivel medio: Pestañas, Ventanas y Buffers
Si pensabas que con Vim sólo podías editar ficheros de uno en uno, te voy a enseñar como puedes editar y/o visualizar al tiempo varios ficheros para optimizar tu trabajo. Como sabrás si indicas a Vim como parámetro un fichero te lo abrirá para editar: vim fichero.txt Pero

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 .
Abriendo el 'navegador de vim'

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:

Vim en modo navegacion. Ficheros en Pestaña y Ventana

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.

Autocompletando HTML en Vim
Autocompletado HTML

Para anular la selección bastará simplemente con pulsar  ESC o  Ctrl+U para eliminar la inserción antes de aceptar.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux