Explicacion nvim file
Este archivo de configuración es un ejemplo de un archivo .vimrc
(o init.vim
si usas Neovim) que personaliza Vim/Neovim con diversas opciones y plugins. Te explico brevemente lo que hace cada sección:
1. Configuración de Vim y Vim-Plug:
vim-plug
: Es un gestor de plugins para Vim/Neovim. Si no está instalado, se instala automáticamente desde GitHub.foldmethod=marker
: Se establece que el método de plegado (folding) en Vim se base en marcadores (comentarios con 3 veces llaves abiertas y 3 veces llaves cerradas).
2. Configuración estándar de Vim:
syntax on
: Activa la sintaxis de colores.set encoding=utf-8
: Usa codificación UTF-8.set tabstop=4
y similares: Configura la indentación con 4 espacios para las tabs y líneas de código.set number
: Muestra los números de línea.set spell
: Habilita la corrección ortográfica.set cursorline
: Resalta la línea actual del cursor.set list
: Muestra caracteres no imprimibles (como espacios y tabulaciones).
3. Comandos para manejo de ventanas y redimensionado:
<C-h/j/k/l>
: Te permite navegar entre ventanas con las teclasCtrl + hjkl
.<A-h/j/k/l>
: Redimensiona las ventanas usando las teclasAlt + hjkl
.
4. Configuración de pliegues (folding):
set foldmethod=marker
: Los pliegues se definen mediante comentarios como 3 veces llaves abiertas y 3 veces llaves cerradas.set foldlevelstart=99
: Abre todos los pliegues al inicio.set foldnestmax=10
: Define la cantidad máxima de niveles de anidamiento de pliegues.
5. Configuración de auto-completado y búsqueda:
- Vim completions (
nvim-compe
,coc.nvim
): Plugins que habilitan autocompletado de código en tiempo real. wildmenu
: Permite una mejor navegación de las opciones de completado.
6. Configuración de Gitsigns y GitGutter:
gitsigns.nvim
yvim-gitgutter
: Muestran en el margen los cambios en archivos controlados por Git (añadidos, modificados, eliminados).nnoremap <Leader>gs
: Varios atajos para interactuar con los cambios de Git (como ver el estado de los “hunks” o bloques de cambios).
7. Plugins personalizados:
vim-ai
: Habilita la interacción con un modelo GPT para autocompletar y modificar texto.ale
: Linter para varios lenguajes de programación, con soporte para arreglos automáticos.vimtex
: Mejoras para la edición de LaTeX.vimwiki
: Herramienta para tomar notas y organizar tareas dentro de Vim.
8. Otros ajustes útiles:
autocmd
: Establece acciones automáticas, como recargar archivos si cambian fuera de Vim.autocmd BufWinEnter
: Resalta los espacios en blanco al final de las líneas, evitando caracteres invisibles no deseados.
9. Función ModifyTextWidth
:
- Esta función ajusta el
textwidth
al abrir archivos Markdown según el contenido de las líneas (especialmente para enlaces).
10. Configuración de la apariencia visual:
catppuccin
: Un esquema de colores personalizable.statusline
: Muestra información adicional en la barra de estado, como el estado de los “hunks” de Git.
Este archivo .vimrc
está altamente optimizado para un entorno de desarrollo variado (trabajo con Git, programación, edición de LaTeX, Markdown, etc.), con configuraciones para mejorar la eficiencia en el uso de Vim y la personalización del entorno de trabajo. Si tienes alguna duda sobre alguna parte específica, ¡dime y la profundizamos más!
Este fragmento de configuración corresponde a un archivo de configuración de Vim/Neovim, específicamente el archivo init.vim
o init.lua
que contiene la configuración de diversos complementos (plugins) para mejorar la experiencia de edición de código. Aquí te explico los detalles de cada parte que mencionas:
1. ALE (Asynchronous Lint Engine):
- Objetivo: Este complemento proporciona linting y formateo automático de código para varios lenguajes de programación.
- Configuración:
g:ale_linters
: Se define qué linters (herramientas que analizan el código en busca de errores) usar para diferentes lenguajes comoyaml
,cpp
,c
,markdown
, etc.g:ale_fixers
: Se especifican los formateadores de código, comoclang-format
para C y C++.g:ale_pattern_options
: Configura ALE para no hacer linting ni arreglos automáticos en el archivo de mensajes de confirmación de Git (COMMIT_EDITMSG
).- Varios ajustes permiten mejorar la experiencia de linting, como el formato de los mensajes de ALE, el uso de globos de notificación y la integración con LSP (Language Server Protocol).
2. vim-dotoo:
- Objetivo: Este complemento proporciona soporte para los archivos de agenda
dotoo
, un formato simple de gestión de tareas. - Configuración: Se configura para abrir archivos
*.dotoo
con el tipo de archivodotoo
y se define una ubicación específica para los archivos de agenda.
3. vim-asciidoctor:
- Objetivo: Proporciona soporte para la edición de archivos AsciiDoc, que es un formato de documentación.
- Configuración:
- Se habilita el plegado de código (folding) en los archivos AsciiDoc y se configuran lenguajes para el plegado, como
lua
,vim
,sh
,python
, etc.
- Se habilita el plegado de código (folding) en los archivos AsciiDoc y se configuran lenguajes para el plegado, como
4. nvim-compe:
- Objetivo: Proporciona autocompletado de código en Neovim.
- Configuración:
- Se habilita el autocompletado con
g:compe.autocomplete
, y se personalizan los tiempos de espera y las longitudes mínimas de los caracteres para activar las sugerencias. - Se mapean combinaciones de teclas como
<C-Space>
para invocar el completado.
- Se habilita el autocompletado con
5. vimtex:
- Objetivo: Facilita la edición de archivos LaTeX.
- Configuración: Se establece que el sabor de LaTeX a usar será el estándar.
6. Tagbar:
- Objetivo: Un complemento que muestra una barra lateral con una lista de símbolos (funciones, clases, etc.) en el archivo.
- Configuración: Se mapea
<F8>
para abrir o cerrar el panel deTagbar
.
7. Undotree:
- Objetivo: Permite explorar el historial de deshacer (undo) en Vim.
- Configuración: Se mapea
<F5>
para alternar el árbol de deshacer.
8. vim-ledger:
- Objetivo: Proporciona soporte para editar archivos de contabilidad en formato Ledger.
- Configuración: Se establece que los archivos con extensión
.ledger
se abrirán con el tipo de archivoledger
.
9. vim-fugitive:
- Objetivo: Un complemento para integrar Git con Vim.
- Configuración: Se mapean varias combinaciones de teclas para abrir el estado de Git, ver el historial de Git, hacer commits, ver diferencias, entre otros.
10. coc.nvim:
- Objetivo: Proporciona autocompletado y características avanzadas de LSP (Language Server Protocol) en Neovim.
- Configuración:
- Se configuran extensiones como
coc-clangd
ycoc-tsserver
para trabajar con los servidores de lenguaje de C/C++ y TypeScript. - Se definen combinaciones de teclas para interactuar con la funcionalidad de LSP, como ir a la definición (
gd
), ver la documentación (?
), etc.
- Se configuran extensiones como
11. nvim-treesitter:
- Objetivo: Utiliza Treesitter para una mejor detección de sintaxis y resaltado de código.
- Configuración: Se habilita el resaltado de código y el soporte para colores “arcoíris” en los paréntesis. También se asegura de que se instalen los analizadores de sintaxis para ciertos lenguajes como C y Org mode.
12. NERDTree:
- Objetivo: NERDTree es un complemento para explorar archivos y directorios en Vim.
- Configuración:
- Se mapea
<C-n>
para alternar la vista de NERDTree. - Se establecen reglas para ignorar ciertos tipos de archivos, como archivos compilados (
.o
,.so
), y se configura el tamaño de la ventana de NERDTree.
- Se mapea
13. orgmode:
- Objetivo: Soporte para editar archivos de Org mode en Neovim, utilizado para la toma de notas y la organización de tareas.
- Configuración: Se configura para trabajar con archivos
board.org
como los archivos de agenda.
14. nvim-lspconfig:
- Objetivo: Configuración de servidores de lenguaje (LSP) para varios lenguajes.
- Configuración: Se establecen configuraciones para varios servidores de lenguaje como
vimls
(Vim LSP),dockerls
,pyright
,clangd
, entre otros. También se mapean teclas para interactuar con estos servidores, comogd
para ir a la definición ygr
para las referencias.
15. vimspector:
- Objetivo: Un depurador (debugger) para Vim.
- Configuración: Se mapean combinaciones de teclas para controlar el flujo del depurador, como pausar (
Leader+dx
), hacer breakpoint (Leader+db
), etc.
16. bufferline.nvim:
- Objetivo: Proporciona una barra de pestañas en Neovim para facilitar la navegación entre buffers (archivos abiertos).
- Configuración: No aparece configurado explícitamente en el fragmento, pero si se detecta que el complemento está presente, se podría activar algún comportamiento personalizado.
Este archivo de configuración personaliza Neovim/Vim con una gran cantidad de complementos para una experiencia de desarrollo más eficiente, incluyendo herramientas para edición de código, depuración, control de versiones, y más.
1
2
3
4
5
let data_dir = has('nvim') ? stdpath('config') : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
endif
" *3 veces llaves cerradas*
Esta es una porción de código escrita en Vimscript, que es el lenguaje de scripting usado en Neovim y Vim. Te voy a desglosar cada parte para que lo entiendas mejor.
1. let data_dir = has('nvim') ? stdpath('config') : '~/.vim'
let
: Esta palabra clave se utiliza para asignar un valor a una variable.data_dir
: Es el nombre de la variable que va a almacenar una ruta de directorio.has('nvim')
: Es una función que devuelve un valor verdadero (1
) si se está ejecutando en Neovim, y0
si se está ejecutando en Vim. En este caso, se está usando para detectar si el entorno es Neovim o Vim.stdpath('config')
: Esta función devuelve la ruta del directorio de configuración en Neovim. Normalmente es~/.config/nvim
.~/.vim
: Este es el directorio predeterminado de configuración en Vim.? :
: Este es un operador ternario que actúa como un “si” en una sola línea. Sihas('nvim')
devuelve1
(es decir, si es Neovim), entonces la variabledata_dir
se establece en el directorio de configuración de Neovim (stdpath('config')
), de lo contrario, se establece en~/.vim
(el directorio predeterminado de Vim).
En resumen: Este comando determina si el script se está ejecutando en Neovim o Vim y asigna la ruta de configuración apropiada a data_dir
.
2. if empty(glob(data_dir . '/autoload/plug.vim'))
glob()
: Esta función busca archivos que coincidan con un patrón. En este caso, busca el archivoplug.vim
en el directorio de configuracióndata_dir
dentro de la carpetaautoload
.empty()
: Esta función devuelve1
si el resultado deglob()
es vacío, es decir, si no se encuentra el archivoplug.vim
.data_dir . '/autoload/plug.vim'
: Aquí,.
se utiliza para concatenar la rutadata_dir
con/autoload/plug.vim
, formando así la ruta completa del archivoplug.vim
.
En resumen: Este condicional verifica si el archivo plug.vim
no existe en el directorio de autoload. Si no existe, se ejecuta el bloque dentro del if
.
3. silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
silent
: Esto hace que la ejecución del siguiente comando no imprima nada en la pantalla.execute
: Ejecuta un comando externo desde Vimscript.!curl -fLo
: Esto ejecuta el comando de shellcurl
, que es una herramienta para transferir datos desde o hacia un servidor. Los parámetros son:-f
: Hace quecurl
falle silenciosamente si hay errores.-L
: Hace quecurl
siga cualquier redirección si la URL cambia.-o
: Especifica el nombre del archivo donde se guardará el contenido descargado.
.data_dir.'/autoload/plug.vim'
: Esta es la ruta completa en la que se guardará el archivoplug.vim
.--create-dirs
: Si no existe el directorio donde se guardará el archivo,curl
lo crea automáticamente.- La URL
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
es la ubicación del archivoplug.vim
en GitHub, que es el script necesario para usar el administrador de complementos Vim-Plug.
En resumen: Si el archivo plug.vim
no existe, el código descarga el archivo desde GitHub usando curl
y lo guarda en la carpeta correspondiente para que Vim-Plug funcione correctamente.
4. endif
Esta línea cierra el bloque if
, indicando que el código dentro del if
solo se ejecuta si el archivo plug.vim
no existe en la ubicación especificada.
5. " *3 veces llaves cerradas*
Este es un comentario en Vimscript (todo lo que va después del "
se ignora). En este caso, parece ser un marcador de cierre para una sección de código, pero no afecta la ejecución del script.
Resumen del flujo:
- Se determina si se está ejecutando en Neovim o Vim y se establece el directorio de configuración.
- Se verifica si el archivo
plug.vim
existe en el directorioautoload
. - Si no existe, se descarga el archivo
plug.vim
de GitHub usandocurl
. - El archivo descargado permite el uso de Vim-Plug, un administrador de complementos para Vim y Neovim.
Este código está configurando de manera automática Vim-Plug si aún no está presente en tu configuración.
Este bloque de código está definiendo mapeos de teclas (key mappings) para facilitar la manipulación de texto y la navegación entre ventanas en Vim o Neovim. Vamos a desglosarlo en partes:
1. vnoremap < <gv
vnoremap
: Mapea una tecla en el modo visual (v
), y se asegura de que el mapeo no pueda ser sobrescrito (por eso elnoremap
).<
: Esta es la tecla que se va a mapear.<gv
: Esto mueve el texto seleccionado en el modo visual una tabulación a la izquierda (shift left) y luego vuelve a poner la selección activa sobre el texto desplazado.
En resumen: Este mapeo mueve el texto seleccionado una tabulación a la izquierda y luego vuelve a seleccionar el texto desplazado.
2. vnoremap > >gv
- Este mapeo es muy similar al anterior, pero mueve el texto seleccionado una tabulación a la derecha (shift right).
>
: Es la tecla que se mapea.>gv
: Mueve el texto seleccionado una tabulación a la derecha y luego vuelve a poner la selección activa sobre el texto desplazado.
En resumen: Este mapeo mueve el texto seleccionado una tabulación a la derecha y luego vuelve a seleccionar el texto desplazado.
3. Navegar entre ventanas con Ctrl + hjkl
Las siguientes líneas permiten navegar entre las ventanas de Vim/Neovim usando las combinaciones de teclas Ctrl + hjkl
:
nmap <silent> <c-k> :wincmd k<CR>
:nmap
: Mapea la tecla en el modo normal (n
).<silent>
: Hace que el mapeo se ejecute sin mostrar el comando en la línea de estado.<c-k>
: La combinación de teclasCtrl + k
.:wincmd k<CR>
: El comando:wincmd k
mueve el cursor a la ventana superior (la ventana “arriba”).
nmap <silent> <c-j> :wincmd j<CR>
::wincmd j
mueve el cursor a la ventana inferior.
nmap <silent> <c-h> :wincmd h<CR>
::wincmd h
mueve el cursor a la ventana izquierda.
nmap <silent> <c-l> :wincmd l<CR>
::wincmd l
mueve el cursor a la ventana derecha.
En resumen: Estos mapeos te permiten usar Ctrl + k
, Ctrl + j
, Ctrl + h
, y Ctrl + l
para moverte entre las ventanas de Vim/Neovim de manera eficiente, como si estuvieras utilizando un administrador de ventanas.
4. Redimensionar ventanas con Alt + hjkl
Las siguientes líneas permiten redimensionar las ventanas con las combinaciones de teclas Alt + hjkl
:
map <a-l> :vertical res -5<CR>
:map
: Mapea la tecla en cualquier modo.<a-l>
: La teclaAlt + l
.:vertical res -5<CR>
: Este comando redimensiona la ventana verticalmente (cambia su ancho) hacia la izquierda en 5 unidades.
map <a-h> :vertical res +5<CR>
::vertical res +5<CR>
: Redimensiona la ventana verticalmente (cambia su ancho) hacia la derecha en 5 unidades.
map <a-j> :res -5<CR>
::res -5<CR>
: Redimensiona la ventana horizontalmente (cambia su altura) hacia arriba en 5 unidades.
map <a-k> :res +5<CR>
::res +5<CR>
: Redimensiona la ventana horizontalmente (cambia su altura) hacia abajo en 5 unidades.
En resumen: Estos mapeos te permiten redimensionar las ventanas utilizando las teclas Alt + l
, Alt + h
, Alt + j
, y Alt + k
para ajustar el tamaño de las ventanas de manera eficiente.
Resumen general:
- Modo Visual: Las teclas
<
y>
se usan para desplazar el texto seleccionado a la izquierda o a la derecha, manteniendo la selección activa. - Navegación entre ventanas: Usas
Ctrl + k/j/h/l
para moverte entre las ventanas de Vim/Neovim. - Redimensionar ventanas: Usas
Alt + h/j/k/l
para ajustar el tamaño de las ventanas.
Este código mejora la eficiencia al trabajar con múltiples ventanas y al editar texto, haciendo que la experiencia en Vim/Neovim sea más fluida.
Claro, te explico cada parte de este bloque de código:
1. nnoremap <S-h> 5h
y vnoremap <S-h> 5h
nnoremap <S-h> 5h
: Mapea la combinación de teclasShift + h
en el modo normal (n
) para mover el cursor cinco caracteres a la izquierda.nnoremap
: “n” para el modo normal y “noremap” para asegurarse de que no se pueda sobrescribir este mapeo.<S-h>
: La teclaShift + h
.5h
: Esto mueve el cursor 5 posiciones hacia la izquierda.
vnoremap <S-h> 5h
: MapeaShift + h
en el modo visual (v
) de manera similar, para mover el cursor 5 posiciones a la izquierda dentro del área de selección.vnoremap
: “v” para el modo visual.
En resumen: Estos dos mapeos hacen que al presionar Shift + h
en el modo normal o visual, el cursor se mueva 5 posiciones hacia la izquierda. Esto permite moverse más rápidamente en la horizontal.
2. nnoremap <S-l> 5l
y vnoremap <S-l> 5l
nnoremap <S-l> 5l
: Mapea la combinación de teclasShift + l
en el modo normal (n
) para mover el cursor cinco caracteres a la derecha.<S-l>
: La teclaShift + l
.5l
: Mueve el cursor 5 posiciones hacia la derecha.
vnoremap <S-l> 5l
: MapeaShift + l
en el modo visual (v
) de manera similar, para mover el cursor 5 posiciones a la derecha dentro del área de selección.
En resumen: Estos dos mapeos hacen que al presionar Shift + l
en el modo normal o visual, el cursor se mueva 5 posiciones hacia la derecha. Esto también permite un movimiento más rápido en la horizontal.
3. nnoremap <S-j> 5j
y vnoremap <S-j> 5j
nnoremap <S-j> 5j
: Mapea la combinación de teclasShift + j
en el modo normal (n
) para mover el cursor 5 líneas hacia abajo.5j
: Mueve el cursor 5 líneas hacia abajo.
vnoremap <S-j> 5j
: MapeaShift + j
en el modo visual (v
) de manera similar, para mover el cursor 5 líneas hacia abajo dentro del área de selección.
En resumen: Estos dos mapeos hacen que al presionar Shift + j
en el modo normal o visual, el cursor se mueva 5 líneas hacia abajo, lo que permite desplazarse más rápido de manera vertical.
4. nnoremap <S-k> 5k
y vnoremap <S-k> 5k
nnoremap <S-k> 5k
: Mapea la combinación de teclasShift + k
en el modo normal (n
) para mover el cursor 5 líneas hacia arriba.5k
: Mueve el cursor 5 líneas hacia arriba.
vnoremap <S-k> 5k
: MapeaShift + k
en el modo visual (v
) de manera similar, para mover el cursor 5 líneas hacia arriba dentro del área de selección.
En resumen: Estos dos mapeos hacen que al presionar Shift + k
en el modo normal o visual, el cursor se mueva 5 líneas hacia arriba, permitiendo un desplazamiento más rápido en dirección vertical.
5. nmap r :redo<CR>
nmap r :redo<CR>
: Mapea la teclar
en el modo normal (n
) para ejecutar el comandoredo
.nmap
: Mapea la tecla en el modo normal.r
: La tecla que se mapea.:redo
: Es el comando de Vim para rehacer una acción que fue deshecha previamente (opuesto aundo
).<CR>
: Simula presionarEnter
después de escribir el comando.
En resumen: Este mapeo hace que presionar r
en el modo normal ejecute el comando redo
, permitiendo rehacer la última acción que se deshizo.
Resumen general:
- Movimiento rápido en el modo normal y visual: Las combinaciones
Shift + h
,Shift + l
,Shift + j
, yShift + k
permiten mover el cursor rápidamente 5 posiciones hacia la izquierda, derecha, arriba y abajo, respectivamente. - Rehacer: La tecla
r
está mapeada para realizar la acción de rehacer (redo
), lo que permite recuperar una acción que fue deshecha.
En conjunto, estos mapeos ayudan a mejorar la eficiencia al navegar por el texto y manipular las acciones de deshacer/rehacer en Vim o Neovim.
Este bloque de código está configurando e integrando el plugin gitsigns.nvim para mejorar la integración de Git en Neovim, y mapea teclas para facilitar el uso de ciertas funcionalidades del plugin. Vamos a desglosar las partes principales de este bloque:
1. Configuración del plugin (gitsigns.nvim
)
El bloque comienza verificando si el plugin gitsigns.nvim
está presente en la lista de plugins (plugs
). Si está presente, entonces se ejecuta la configuración para este plugin.
1
if has_key(plugs, 'gitsigns.nvim')
Esta línea verifica si la clave 'gitsigns.nvim'
existe en el diccionario plugs
, lo que indica que el plugin está cargado. Si es así, se ejecuta el bloque de código en Lua que configura el plugin.
La configuración de gitsigns.nvim se realiza con código en Lua dentro de un bloque lua << EOF
que inicia y termina el bloque de código Lua.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
lua << EOF
require("gitsigns").setup{
signs = {
add = { text = '│' },
change = { text = '│' },
delete = { text = '_' },
topdelete = { text = '‾' },
changedelete = { text = '~' },
untracked = { text = '┆' },
},
attach_to_untracked = true,
current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
current_line_blame_opts = {
virt_text = true,
virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
delay = 1000,
ignore_whitespace = false,
},
}
EOF
Detalles de la configuración:
signs
: Define los caracteres que se utilizan para mostrar los cambios en el archivo:add
: Representa las líneas añadidas (│
).change
: Representa las líneas modificadas (│
).delete
: Representa las líneas eliminadas (_
).topdelete
: Representa las líneas eliminadas al inicio (‾
).changedelete
: Representa las líneas modificadas y eliminadas (~
).untracked
: Representa las líneas no rastreadas (┆
).
attach_to_untracked
: Si se establece entrue
, muestra las señales de cambios en archivos no rastreados también.current_line_blame
: Si se establece enfalse
, desactiva el “blame” de la línea actual. Esto muestra información sobre quién fue el responsable de la última modificación en una línea específica.current_line_blame_opts
: Configura cómo se muestra la información de blame en la línea actual:virt_text
: Muestra la información de blame como texto virtual en la pantalla.virt_text_pos
: Posiciona el texto virtual al final de la línea (eol
), o lo puede colocar sobre la línea o alinear a la derecha (overlay
oright_align
).delay
: Establece el retraso para mostrar el blame (en milisegundos).ignore_whitespace
: Si esfalse
, no ignora los cambios solo por espacio en blanco al calcular el blame.
2. Comandos mapeados con teclas
A continuación, se definen varios mapeos de teclas para facilitar el uso de los comandos de gitsigns. Se utilizan combinaciones de teclas con el líder (<Leader>
) para ejecutar acciones de Git directamente desde Neovim.
Visualización de los cambios:
1
nnoremap <Leader>gp :Gitsigns preview_hunk<CR>
<Leader>gp
: Muestra un “popup” con las diferencias del hunk bajo el cursor. Un hunk es un bloque de cambios en Git.
Manipulación de hunks (bloques de cambios):
1
2
3
nnoremap <Leader>gs :Gitsigns stage_hunk<CR>
nnoremap <Leader>gr :Gitsigns reset_hunk<CR>
nnoremap <Leader>gu :Gitsigns undo_stage_hunk<CR>
<Leader>gs
: Permite “staging” del hunk (agregar el bloque de cambios al área de preparación para commit).<Leader>gr
: Revertir (reset) un hunk, es decir, deshacer el cambio en el bloque.<Leader>gu
: Deshacer el “staging” de un hunk (remover el cambio del área de preparación).
Manipulación de todos los hunks en el archivo:
1
2
3
nnoremap <Leader>gS :Gitsigns stage_buffer<CR>
nnoremap <Leader>gU :Gitsigns reset_buffer_index<CR>
nnoremap <Leader>gR :Gitsigns reset_buffer<CR>
<Leader>gS
: Hace “stage” de todos los hunks en el archivo (los prepara para el commit).<Leader>gU
: Resetea el índice del buffer (deshace todos los cambios que no están en el área de preparación).<Leader>gR
: Resetea todo el buffer, es decir, descarta todos los cambios no confirmados en el archivo.
Git blame (ver quién modificó una línea específica):
1
nnoremap <Leader>gB :Gitsigns toggle_current_line_blame<CR>
<Leader>gB
: Activa o desactiva la visualización del “blame” de la línea actual (quién y cuándo se hizo el último cambio en esa línea).
3. Cierre del bloque de configuración
1
endif
Esta línea cierra el bloque condicional if
, indicando que la configuración solo se aplica si gitsigns.nvim
está presente en la lista de plugins.
Resumen general:
- gitsigns.nvim es un plugin para integrar Git en Neovim de forma visual, mostrando signos de cambios en el archivo.
- Se configuraron las señales que representan los diferentes tipos de cambios en el archivo, como adiciones, modificaciones, eliminaciones, etc.
- Se mapean teclas para realizar acciones comunes en Git, como ver diferencias (
gp
), hacer “stage” de cambios (gs
), resetear cambios (gr
), y manipular hunks completos en el archivo (gS
,gU
,gR
). - Se mapea una tecla para activar el “blame” de la línea actual (
gB
), lo que te permite ver quién fue el autor de la última modificación en una línea específica.
En resumen, este bloque hace que el uso de Git en Neovim sea más eficiente y visual, permitiendo trabajar con hunks, ver los cambios y realizar las acciones de Git sin salir del editor.
Para hacer un commit local usando gitsigns.nvim o, más generalmente, en Neovim con un flujo de trabajo de Git, el plugin gitsigns.nvim no proporciona directamente un mapeo para hacer el commit, pero puedes hacerlo usando los comandos estándar de Git. Aquí están los pasos:
1. Asegúrate de haber hecho stage de los cambios:
Si no has hecho stage de tus cambios aún, puedes usar los mapeos que configuraste para gitsigns.nvim o los comandos de Git directamente:
Hacer stage de todos los cambios en el archivo:
- Presiona
<Leader>gS
para hacer stage de todos los hunks (cambios) en el archivo actual.
- Presiona
Hacer stage de un hunk específico:
- Coloca el cursor sobre el hunk que quieres agregar al área de preparación y presiona
<Leader>gs
.
- Coloca el cursor sobre el hunk que quieres agregar al área de preparación y presiona
2. Realiza el commit:
Una vez que hayas hecho stage de los cambios, puedes hacer el commit usando el comando estándar de Git en Neovim.
git config –global user.email “you@example.com” git config –global user.name “Your Name”
Abre la línea de comandos en Neovim y ejecuta:
1
:Git commit
Esto abrirá un editor para que escribas el mensaje del commit.
Alternativamente, si prefieres una forma más rápida, puedes usar el comando:
1
:!git commit
Esto ejecutará el comando de Git sin abrir un editor y hará el commit con el mensaje por defecto si no se proporciona uno.
3. Opcional: Agregar un mensaje al commit en una sola línea
Si prefieres hacer el commit con un mensaje directamente desde el comando sin abrir el editor, puedes ejecutar:
1
:!git commit -m "Tu mensaje de commit"
Esto realizará un commit local con el mensaje especificado. Ten en cuenta que este comando no depende de gitsigns.nvim, ya que gitsigns.nvim solo maneja la visualización y manipulación de cambios, no las acciones de Git como tal.
Resumen:
- Hacer stage de los cambios: Usa los mapeos
<Leader>gS
(todos los cambios) o<Leader>gs
(un solo hunk). - Realizar el commit: Usa
:Git commit
o:!git commit -m "Tu mensaje"
.
Así, puedes hacer un commit local en Neovim utilizando los comandos estándar de Git junto con gitsigns.nvim para gestionar los cambios visualmente.
Claro, te explico la sintaxis y el significado del bloque de código que compartiste. Este fragmento de configuración es para el plugin vim-speeddating en Vim, un editor de texto popular. El código está diseñado para remapear ciertas combinaciones de teclas, y se muestra en un bloque de configuración de VimScript.
Aquí está el desglose de lo que hace cada línea:
1. Desactivar mapeos predeterminados del plugin
1
let g:speeddating_no_mappings = 1
let
: Esta es una declaración en VimScript para asignar un valor a una variable.g:speeddating_no_mappings
: Esta es una variable global (denotada por el prefijog:
) que es específica para el pluginvim-speeddating
.= 1
: Establece la variable a1
, lo cual indica que se desactivan los mapeos predeterminados del plugin, lo que significa que puedes establecer tus propios mapeos sin que los mapeos predeterminados interfieran.
2. Remapeo de teclas en modo normal
1
2
nmap <C-u> <Plug>SpeedDatingUp
nmap <C-d> <Plug>SpeedDatingDown
nmap
: Este comando en Vim asigna un mapeo de teclas en el modo normal.<C-u>
y<C-d>
son las combinaciones de teclas (Ctrl+u y Ctrl+d respectivamente).<Plug>SpeedDatingUp
y<Plug>SpeedDatingDown
son comandos internos del pluginvim-speeddating
que permiten aumentar o disminuir una fecha/valor, respectivamente.
3. Remapeo de teclas en modo visual
1
2
xmap <C-u> <Plug>SpeedDatingUp
xmap <C-d> <Plug>SpeedDatingDown
xmap
: Asigna un mapeo de teclas en el modo visual de Vim (cuando se selecciona texto).- Similar a las líneas anteriores, las teclas
<C-u>
y<C-d>
se remapean para incrementar o decrementar la fecha seleccionada.
4. Comandos personalizados con el líder (leader key)
1
2
nmap <leader>sdu <Plug>SpeedDatingNowUTC
nmap <leader>sdi <Plug>SpeedDatingNowLocal
nmap
: Nuevamente, asigna mapeos de teclas en el modo normal.<leader>
es una tecla que se configura como “líder” en Vim. Generalmente, por defecto, es la barra invertida (\
) o puedes configurarla a otro valor. Cuando usas<leader>
, lo que se hace es evitar que las combinaciones de teclas entre en conflicto con otras funciones.<leader>sdu
mapea la combinación para que invoque el comando<Plug>SpeedDatingNowUTC
, que probablemente inserta la fecha y hora actuales en formato UTC.<leader>sdi
mapea la combinación para que invoque el comando<Plug>SpeedDatingNowLocal
, que inserta la fecha y hora en formato local.
Resumen
Este bloque de código:
- Desactiva los mapeos predeterminados del plugin.
- Remapea las teclas
Ctrl+u
yCtrl+d
tanto en modo normal como visual para aumentar y disminuir fechas. - Asocia las combinaciones
<leader>sdu
y<leader>sdi
para insertar la fecha/hora actual en formato UTC o local, respectivamente.
Todo esto está configurado para evitar conflictos con las combinaciones de teclas predeterminadas de tmux (una herramienta de multiplexión de terminales que usa Ctrl+b
como escape, y Ctrl+u
y Ctrl+d
también pueden estar en uso).
INICIAR :
1
browser-sync start --server --files "*.html, *.css, *.js"