Trucos para programadores y devops para aumentar la productividad o visualización en depuraciones
Algunas veces tenemos codigos de script o programas que nos toca depurar pero no es posible visualizar donde comienza o termina una función o un metodo, podemos ver la llave de inicio o de cierre pero nunca las dos por el código ser mas largo que la pantalla, para esto existen algunos trucos que podemos aplicar con vim y no tener que ir a otra IDE que posiblemente no tengamos en el servidor que estamos trabajando. entonces aplica estos trucos:
Como mantener una estructura de indentación específica sin tener que complicarse:
Para mantener una estructura de indentación específica podemos personalizar VIM en nuestro archivo ~/.vimrc estableciendo estilos de indentacion específicos por ejemplo:
" Asegúrate de que Vim esté en modo nocompatible, lo que permite el uso de muchas características modernas set nocompatible " Habilita el resaltado de sintaxis syntax on " Establece la indentación automática basada en el tipo de archivo filetype indent on " Establece la cantidad de espacios que una tabulación cuenta como set tabstop=4 " Establece la cantidad de espacios que una tabulación se muestra como set shiftwidth=4 " Establece que una tabulación se cuenta como 4 espacios (esto hará que una tabulación se inserte como espacios) set expandtab " Habilita el guardado automático y la restauración de la posición del cursor if has("autocmd") au BufReadPost * if line("'"") > 0 && line("'"") <= line("$") | exe "normal! g`"" | endif endif " Habilita la numeración de líneas set number " Resalta la línea actual set cursorline " Habilita el plegado de código basado en la sintaxis set foldmethod=syntax set foldlevel=0 " Habilita la barra de estado siempre visible set laststatus=2
Explicación de algunas de las configuraciones clave:
- set nocompatible: Esto desactiva el modo de compatibilidad, permitiendo a Vim utilizar características más modernas.
- syntax on: Habilita el resaltado de sintaxis, lo que puede hacer que el código sea más legible.
- filetype indent on: Habilita la indentación automática basada en el tipo de archivo, lo que puede ayudar a mantener una estructura de indentación consistente.
- set tabstop=4 y set shiftwidth=4: Estas configuraciones establecen el número de espacios que una tabulación cuenta y se muestra como, respectivamente.
- set expandtab: Esto convierte las tabulaciones en espacios, asegurando una consistencia aún mayor en tu indentación.
- set number: Esto habilita la numeración de líneas, lo que puede facilitar la navegación por tu código.
- set foldmethod=syntax y set foldlevel=0: Estas configuraciones habilitan el plegado de código basado en la sintaxis, lo que puede hacer que sea más fácil trabajar con archivos grandes y complejos.Asegúrate de guardar este archivo como .vimrc en tu directorio principal (o como vimrc en Windows). Una vez hecho esto, puedes aplicar la configuración con el comando :source $MYVIMRC dentro de Vim.
Algunas veces tenemos mas de una configuración o estilos de preferencias de VIM
Cuando tenemos mas de un grupo de personalizaciones que se aplican por separado para algunos escenarios y queremos tenerla junta dentro del mismo archivo y llamarla para aplicarla segun nos convenga, podemos hacer funciones que nos ayudaran con esta preferencia.
function! SetMyIndent() set tabstop=4 set shiftwidth=4 set expandtab filetype indent on endfunction function! UnsetMyIndent() " aquí puedes colocar tus configuraciones predeterminadas set tabstop=8 set shiftwidth=8 set noexpandtab filetype indent off endfunction command! MyIndent call SetMyIndent() command! NoMyIndent call UnsetMyIndent()
La preferencia o script anterior dentro del archivo .vimrc realiza lo siguiente:
- Definimos dos funciones: SetMyIndent y UnsetMyIndent.
- SetMyIndent establece la indentación a tu configuración personalizada.
- UnsetMyIndent restablece la indentación a un conjunto de valores predeterminados (ajusta estos según tus preferencias).
- Creamos dos comandos, MyIndent y NoMyIndent, que llaman a estas funciones, permitiéndote alternar entre las dos configuraciones fácilmente.
Después de agregar esto a tu .vimrc y recargar Vim (o usando :source $MYVIMRC para recargar el archivo .vimrc o simplemente entra al archivo a editar codigo.sh), podrías usar los comandos :MyIndent para activar tu configuración de indentación personalizada y :NoMyIndent para desactivarla y volver a una configuración predeterminada.
Como aplicar indentacion de un archivo que perdio la indentacion o simplemente no la tenia y la quiere aplicar.
Muchas veces queremos aplicar indentacion a un archivo para mejorar la visualización o la lectura del script o simplemente por organización mientras lo vamos trabajando,
Primer metodo, Usando el modo visual:
Paso 1: Mueve el cursor hasta la primera línea del rango que quieres indentar.
Paso 2: Entra en el modo visual con v.
Paso 3: Usa las teclas de flecha o las teclas j/k para seleccionar el rango de líneas que quieres indentar.
Paso 4: Una vez seleccionadas las líneas, puedes indentarlas hacia la derecha con > o hacia la izquierda con <.
Paso 5: Para aplicar múltiples niveles de indentación, puedes preceder el comando de indentación con un número, por ejemplo, 3> indentará 3 niveles hacia la derecha.
2do. Usando comandos de Ex con rangos:
Paso 1: Mueve el cursor hasta la primera línea del rango que quieres indentar.
Paso 2: Entra en el modo comando con :.
Paso 3: Escribe el rango de líneas que deseas indentar, por ejemplo, para indentar de la línea 5 a la 10, escribirías :5,10.
Paso 4: Usa el comando > para indentar el rango especificado hacia la derecha, o < para indentarlo hacia la izquierda, por ejemplo, :5,10>.
3ro, Usando marcas:
Paso 1: Mueve el cursor hasta la primera línea del rango que quieres indentar.
Paso 2: Marca esta línea con m seguido de una letra (por ejemplo, ma para usar la marca "a").
Paso 3: Mueve el cursor hasta la última línea del rango que quieres indentar.
Paso 4: Usa el comando :'a,.> para indentar desde la marca "a" hasta la línea actual. Reemplaza > con < para desindentar.
Recuerda que también puedes usar == para auto-indentar una línea según la configuración de indentación de Vim para el tipo de archivo con el que estás trabajando. Esto también puede funcionar con rangos, por ejemplo, :5,10== auto-indentaría las líneas del 5 al 10 según las reglas de indentación de Vim para ese tipo de archivo.
Cortar ("yank" en la terminología Vim) un rango de linea sin tener que navegar hasta ellas
Por ultimo muchas veces queremos hacer un corte ("yank" en la terminología Vim) o eliminación de un rango de lineas, sin tener que navegar hasta ellas, para dicho caso VIM funciona como si fuera el comando sed, por lo cual puedes utilizar el comando Ex desde cualquier lugar en el archivo
Por ejemplo eliminar las lineas del 17 al 20 en VIM
- Ingresa al modo de comando presionando :.
- Escribe el rango de líneas que deseas cortar, seguido del comando d (delete, que también corta las líneas para que puedas pegarlas en otra parte). Así que para cortar las líneas 17 a 20, escribirías:
:17,20d
- Presiona Enter para ejecutar el comando. Ahora las líneas 17 a 20 estarán en tu registro y habrán sido eliminadas del archivo.
- Para pegar las líneas cortadas, navega hasta donde quieras pegarlas, entra al modo normal (si no estás ya en él) y utiliza el comando p para pegar después del cursor o P para pegar antes del cursor.Este método es muy útil porque te permite cortar, copiar y pegar líneas específicas sin tener que navegar manualmente hasta ellas y sin tener que contar líneas.
Finalmente como visualizar simultáneamente el comienzo y el final de una función en Vim
Para visualizar simultáneamente el comienzo y el final de una función en Vim, cuando esta ocupa más que el tamaño de la pantalla, puedes usar una de las siguientes técnicas:
- Dividir la ventana en dos: Cuando divides la ventana en Vim, cada ventana mantiene su propio cursor y su comportamiento independiente
Abre tu archivo en Vim y coloca el cursor al principio de la función. Luego:
Utiliza :split o simplemente :sp para dividir la ventana horizontalmente en dos vistas del mismo archivo.
En una de las vistas, mantén el cursor al comienzo de la función.
En la otra vista, mueve el cursor hacia el final de la función.
Ahora puedes ver el principio de la función en una vista y el final en la otra.
- Usar plegado (folding):
Vim tiene una característica llamada "plegado" que te permite colapsar secciones de código. Puedes utilizar esto para colapsar temporalmente partes de tu función y obtener una visión general.
Sitúa el cursor al principio de la función.
Introduce zf% para plegar desde el principio hasta el final de la función (esto asume que te encuentras en la llave de apertura { y que las llaves están balanceadas).
Ahora verás el principio y el final de la función juntos. Para desplegar la función nuevamente, coloca el cursor sobre la línea plegada y pulsa zo.
- Usar la opción scrolloff:
Si solo quieres asegurarte de que siempre haya un número determinado de líneas visibles antes y después de tu cursor, puedes configurar la opción scrolloff:
:set scrolloff=10
Con la configuración anterior, Vim tratará de mantener al menos 10 líneas visibles antes y después de la línea donde se encuentra tu cursor.
Estas técnicas te permiten obtener una visión clara del comienzo y el final de una función larga en Vim. Puedes elegir la que mejor se adapte a tus necesidades y preferencias.
Notas o recordatorio resumen:
Cuando divides la ventana en Vim, cada ventana mantiene su propio cursor y su comportamiento independiente. Por lo tanto, en la ventana principal, al moverte y llegar a la llave de cierre, podrás ver el parpadeo que indica el paréntesis o la llave coincidente.
Para dividir la ventana horizontalmente y mantener el cursor al principio de la función en una ventana y moverlo al final en la otra:
- Coloca el cursor al comienzo de la función.
- Usa :split o :sp para dividir la ventana.
- Ahora tendrás dos vistas del mismo archivo. La vista superior (o principal) tendrá el cursor al comienzo de la función. La vista inferior tendrá su propio cursor, que puedes mover hacia el final de la función.
Para volver a una sola ventana:
- Si deseas cerrar la ventana actual y mantener la otra, utiliza :q o :close.
- Si deseas cerrar la otra ventana y mantener la ventana actual, primero mueve el cursor a la otra ventana con Ctrl-w seguido de una tecla de dirección (j para mover hacia abajo, k para mover hacia arriba), y luego cierra esa ventana con :q o :close.
- Si solo tienes dos ventanas y quieres maximizar la ventana actual, puedes usar Ctrl-w seguido de _ para la ventana horizontal o Ctrl-w seguido de | para la ventana vertical.
Con estas técnicas, podrás dividir y gestionar ventanas en Vim de forma efectiva y visualizar diferentes partes de tu código simultáneamente.
Combinando las funciones y la división de la ventana, mi ~/.vimrc
" Asegúrate de que Vim esté en modo nocompatible, lo que permite el uso de muchas características modernas set nocompatible " Habilita el resaltado de sintaxis syntax on " Establece la indentación automática basada en el tipo de archivo filetype indent on " Establece la cantidad de espacios que una tabulación cuenta como set tabstop=4 " Establece la cantidad de espacios que una tabulación se muestra como set shiftwidth=4 " Establece que una tabulación se cuenta como 4 espacios (esto hará que una tabulación se inserte como espacios) set expandtab " Habilita el guardado automático y la restauración de la posición del cursor if has("autocmd") au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif endif " Habilita la numeración de líneas set number " Resalta la línea actual set cursorline " Habilita el plegado de código basado en la sintaxis set foldmethod=syntax set foldlevel=0 " Habilita la barra de estado siempre visible set laststatus=2 function! Set2Ventanas() " Divide la ventana horizontalmente sp " Ajusta la ventana superior a 15 líneas resize 15 " Mueve el cursor a la ventana inferior wincmd j " (Opcional) Modificaciones adicionales, por ejemplo: set foldmethod=manual endfunction command! DosVentanas call Set2Ventanas() " Función para revertir a la configuración original function! RestoreDefaultConfig() set foldmethod=syntax " (Opcional) Cualquier otra configuración para restaurar endfunction command! DefaultIndent call RestoreDefaultConfig()
Explicación del script (comando para vim anteriores) anterior
Con la anterior logramos que por defecto usar una configuracion personalizada, ademas crear un comando que active la función para ajustar las ventanas y posiblemente modificar la configuración. Además, proporcionaré un comando adicional para desactivar la función y revertir a la configuración original.
Si quieres que la divicion se haga sin tener que ejecutar el comando que llama la funcion puede hacerlo asi:
" Al iniciar Vim:
autocmd VimEnter * sp " Divide la ventana horizontalmente
autocmd VimEnter * resize 15 " Ajusta la ventana superior a 15 líneas
autocmd VimEnter * wincmd j " Mueve el cursor a la ventana inferior
El primer comando, autocmd VimEnter * sp, hará que Vim divida la ventana horizontalmente al iniciarse (VimEnter es un evento que ocurre cuando Vim termina de inicializarse).
El segundo comando, autocmd VimEnter * resize 15, ajustará el tamaño de la ventana actual (que, en este punto, será la superior) a 15 líneas.
El tercer comando, autocmd VimEnter * wincmd j, moverá el cursor a la ventana inferior, haciéndola la ventana principal.
Después de agregar estos comandos a tu ~/.vimrc, cada vez que inicies Vim, debería dividirse automáticamente en dos ventanas, con la ventana superior teniendo 15 líneas de alto y el cursor en la ventana inferior.