Guia-VIM/README.md

271 lines
12 KiB
Markdown
Raw Normal View History

2022-09-19 18:42:20 +02:00
# Índice
- [Índice](#índice)
- [Guia básica de Vim](#guia-básica-de-vim)
2022-09-19 18:42:20 +02:00
- [Archivo de configuración](#archivo-de-configuración)
- [Archivo .viminfo](#archivo-viminfo)
- [The Ultimate vimrc --\> Repo](#the-ultimate-vimrc----repo)
- [Plugins incluidos con vim](#plugins-incluidos-con-vim)
- [Esquemas de color incluidos](#esquemas-de-color-incluidos)
- [Modos incluidos](#modos-incluidos)
2022-09-19 18:42:20 +02:00
- [Cheatsheet de Vim](#cheatsheet-de-vim)
# Guia básica de Vim
2022-09-19 00:26:03 +02:00
2022-09-19 18:42:20 +02:00
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Vimlogo.svg/1024px-Vimlogo.svg.png" width="50%">
2022-09-19 00:26:03 +02:00
Vim (del inglés Vi IMproved) es una versión mejorada del editor de texto Vi, presente en todos los sistemas UNIX.
Su autor, Bram Moolenaar, presentó la primera versión en 1991, fecha desde la que ha experimentado muchas mejoras. La principal característica tanto de Vim como de Vi consiste en que disponen de diferentes modos entre los que se alterna para realizar ciertas operaciones, lo que los diferencia de la mayoría de editores comunes, que tienen un solo modo en el que se introducen las órdenes mediante combinaciones de teclas o interfaces gráficas.
*Gracias wikipedia [https://es.wikipedia.org/wiki/Vim](https://es.wikipedia.org/wiki/Vim)*
## Archivo de configuración
El archvio se llama `.vimrc` y lo podremos encontrar én distintos path según distro. En ubuntu:
```
/etc/vim/vimrc
```
En RHEL y derivadas:
```
/etc/vimrc
```
Veremos algo así:
![](vimrc.png)
*Documentación oficial de vimrc: http://vimdoc.sourceforge.net/htmldoc/usr_05.html*
Algunos parámetros ejemplo para vimrc:
- Mostrar con colores los ficheros:
```
systax on
```
- El siguiente bucle consigue que cuando vuelvas a abrir un archivo este el cursor en el mismo sitio que cuando lo cerraste.
```
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
```
- Para la compatibilidad de los colores de vim con una terminal oscura se utiliza la siguiente opción.
```
set background=dark
```
## Archivo .viminfo
Para utilizar Viminfo, primero necesita tener la funcionalidad +viminfo disponible (:version). Viminfo almacena:
- El historial de la línea de comando
- El historial de búsqueda de cadenas de texto
- El historial de línea de entrada
- El contenido de los registros no vacíos
- Las marcas de diversos archivos
- El archivo de marcas, apuntando a la ubicación en los archivos
- El último patrón de búsqueda/sustitución (para 'n' y '&').
- La lista de *buffer
- Las variables globales
En general, las sesiones almacenan los atributos "externos" y Viminfo los atributos "internos".
## The Ultimate vimrc --> [Repo](https://github.com/amix/vimrc)
Hay dos versiones:
- La Básica: Si quieres algo pequeño simplemente copia basic.vim en tu ~/.vimrc y tendrás una buena configuración básica
- La impresionante: Incluye una tonelada de plugins útiles, esquemas de color y configuraciones
### Plugins incluidos con vim
Leer la documentación de estos plugins es imprescindible para entenderlos mejor. Cada plugin proporciona una experiencia de Vim mucho mejor.
* [ack.vim](https://github.com/mileszs/ack.vim): Plugin de Vim para `the_silver_searcher` (ag) o ack -- un grep endiabladamente rápido
* [bufexplorer.zip](https://github.com/vim-scripts/bufexplorer.zip): Cambia rápida y fácilmente entre buffers. Este plugin se puede abrir con `<leader+o>`.
* [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim): Buscador de archivos, buffers, mru y etiquetas difusas. Está mapeado con `<Ctrl+F>`.
* [goyo.vim](https://github.com/junegunn/goyo.vim): Escritura sin distracciones en Vim.
* [vim-zenroom2](https://github.com/amix/vim-zenroom2): Emula el entorno de iA Writer cuando se editan archivos Markdown, reStructuredText o de texto.
* [lightline.vim](https://github.com/itchyny/lightline.vim): Una línea de statusline/tabline ligera y configurable para Vim
* [NERD Tree](https://github.com/preservim/nerdtree): Un plugin explorador de árboles para vim
* [open_file_under_cursor.vim](https://github.com/amix/open_file_under_cursor.vim): Abrir el archivo bajo el cursor al pulsar `gf`.
* [pathogen.vim](https://github.com/tpope/vim-pathogen): Gestiona tu ruta de ejecución de vim
* [snipmate.vim](https://github.com/garbas/vim-snipmate): snipmate.vim pretende ser un script vim conciso que implementa algunas de las características de los snippets de TextMate en Vim
* [ale](https://github.com/dense-analysis/ale): Comprobación de sintaxis y lint para vim (ALE requiere NeoVim >= 0.2.0 o Vim 8 con +timers +job +channel)
* [vim-commentary](https://github.com/tpope/vim-commentary): Comentar cosas. Usa `gcc` para comentar una línea (toma una cuenta), `gc` para comentar el objetivo de un movimiento. `gcu` descomenta un conjunto de líneas adyacentes comentadas.
* [vim-expand-region](https://github.com/terryma/vim-expand-region): Permite seleccionar visualmente regiones de texto cada vez más grandes utilizando la misma combinación de teclas
* [vim-fugitive](https://github.com/tpope/vim-fugitive): Una envoltura de Git tan impresionante que debería ser ilegal
* [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object): Define un nuevo objeto de texto que representa líneas de código en el mismo nivel de sangría. Útil para scripts python/vim
* [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors): Selecciones múltiples al estilo de Sublime Text para Vim, CTRL+N se reasigna a CTRL+S (debido a YankRing)
* [vim-yankstack](https://github.com/maxbrunsfeld/vim-yankstack): Mantiene un historial de yanks anteriores, cambios y borrados
* [vim-zenroom2](https://github.com/amix/vim-zenroom2) Elimina todo el desorden y se centra sólo en lo esencial. Similar a iA Writer o Write Room
* [gist-vim](https://github.com/mattn/gist-vim) Crea fácilmente gists desde Vim usando el comando `:Gist`.
* [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) Es un plugin para mostrar visualmente los niveles de sangría en Vim
* [editorconfig-vim](https://github.com/editorconfig/editorconfig-vim) EditorConfig ayuda a mantener estilos de codificación consistentes para múltiples desarrolladores trabajando en el mismo proyecto a través de varios editores e IDEs.
### Esquemas de color incluidos
* [peaksea](https://github.com/vim-scripts/peaksea): Por defecto
* [dracula](https://github.com/dracula/vim)
* [vim-colors-solarized](https://github.com/altercation/vim-colors-solarized)
* [vim-irblack](https://github.com/wgibbs/vim-irblack)
* [mayansmoke](https://github.com/vim-scripts/mayansmoke)
* [vim-pyte](https://github.com/therubymug/vim-pyte)
### Modos incluidos
* [vim-coffee-script](https://github.com/kchmck/vim-coffee-script)
* [vim-less](https://github.com/groenewege/vim-less)
* [vim-bundle-mako](https://github.com/sophacles/vim-bundle-mako)
* [vim-markdown](https://github.com/plasticboy/vim-markdown)
* [nginx.vim](https://github.com/vim-scripts/nginx.vim): Highlights configuration files for nginx
* [rust.vim](https://github.com/rust-lang/rust.vim)
* [vim-ruby](https://github.com/vim-ruby/vim-ruby)
* [typescript-vim](https://github.com/leafgarland/typescript-vim)
* [vim-javascript](https://github.com/pangloss/vim-javascript)
* [vim-python-pep8-indent](https://github.com/Vimjas/vim-python-pep8-indent)
2022-09-19 00:26:03 +02:00
## Cheatsheet de Vim
Para editar y salir de la edicción
```
i o INSERT Entrar en modo edicción del texto
ESC Salir del modo.
```
Para entrar en el modo visual
```
v Entrar en modo visual
ESC Salir del modo
```
Los comandos se añaden con `:` delante. Por ejemplo, si queremos ver el número de línea en los documentos:
```
:set nu
```
Para cambiar el modo de los colores:
```
:set background=[dark|light|...]
```
Para forzar cualquier comando se le puede añadir `!`.
Guardar y cerrar
```
:w Permite guardar el fichero.
:q Salir de Vim. Si el fichero ha sido modificado pero no se ha guardado, nos advertirá y no podremos salir de Vim usando este comando.
:q! Salir de Vim, descartando posibles cambios no guardados que se hayan realizado en el fichero.
:wq o :x Hace el guardado del archivo y después sale de Vim.
```
Deshacer y rehacer
u Deshacer acción.
Ctrl+r Rehacer una acción.
Borrar o cortar, copiar, pegar líneas
```
dd Borra la línea actual, donde está el cursor, pero en realidad las corta.
d+num+d Borra el número de líneas que se indique. Pero en realidad las corta.
yy Copiar la línea actual.
y+num+y Copiar el número de líneas que se indique.
p Pegar
```
Mover el cursor
```
h mover un carácter a la izquierda
j mover una fila hacia abajo
k mover una fila hacia arriba
l mover un carácter a la derecha
w mover al principio de la siguiente palabra
b mover al principio de la palabra anterior
e mover al final de la palabra
W mover al principio de la siguiente palabra después de un espacio en blanco
B mover al principio de la palabra anterior antes de un espacio en blanco
E mover al final de la palabra antes de un espacio en blanco
```
Todos los movimientos anteriores pueden ir precedidos de una cuenta; por ejemplo, `4j` se mueve hacia abajo 4 líneas.
```
0 se mueve al principio de la línea
$ se mueve al final de la línea
_ mover al primer carácter no en blanco de la línea
g_ mover al último carácter no en blanco de la línea
gg mover a la primera línea
G pasar a la última línea
ngg se mueve a la n'ª línea del archivo
nG ir a la nª línea del fichero
H mover a la parte superior de la pantalla
M mover a la mitad de la pantalla
L mover a la parte inferior de la pantalla
zz desplazar la línea con el cursor al centro de la pantalla
zt desplazar la línea con el cursor hacia arriba
zb desplazar la línea con el cursor hacia abajo
Ctrl-D mover media página hacia abajo
Ctrl-U mover media página hacia arriba
Ctrl-B subir página
Ctrl-F bajar de página
Ctrl-O saltar a la última posición del cursor (más antigua)
Ctrl-I saltar a la siguiente posición del cursor (después de Ctrl-O)
Ctrl-Y mover el panel de vista hacia arriba
Ctrl-E mover el panel de vista hacia abajo
```
Búsquedas
```
/+texto Al pulsar «/» se abre la función de búsqueda. Entonces podremos escribir el texto que queremos buscar.
n siguiente patrón de búsqueda coincidente
N patrón de búsqueda anterior
* siguiente palabra entera bajo el cursor
# palabra entera anterior bajo el cursor
g* siguiente patrón de búsqueda coincidente (no es una palabra entera) bajo el cursor
g# patrón de búsqueda anterior (no palabra entera) bajo el cursor
gd ir a la definición/primera aparición de la palabra bajo el cursor
% saltar al corchete coincidente { } [ ] ( )
fX a la siguiente 'X' después del cursor, en la misma línea (X es cualquier carácter)
FX a la anterior 'X' antes del cursor (f y F ponen el cursor en X)
tX hasta la siguiente 'X' (similar a la anterior, pero el cursor está antes de la X)
TX hasta la 'X' anterior
; repite lo anterior, en la misma dirección
, repetir lo anterior, en dirección inversa
```
Comentar y descomentar código
```
# Comentar
Primero se selecciona con el modo -VISUAL BLOCK- (Ctrl + v)
Se indica las líneas hacia abajo o marcando 100j (para 100 lineas hacia abajo)
Se presiona I (i mayúscula) para entrar en modo Insertar visual y se escribe el texto con el que se comenta (# o //). Con esto se agregará el texto solo en la línea del cursor.
Después, al presionar ESC se modificará las lineas que se hayan marcado
# Descomentar
Se seleccionar con el modo -VISUAL BLOCK- (Ctrl + v)
Se indica las líneas hacia abajo o marcando 100j (para 100 líneas hacia abajo) y hacia la derecha o 3l (para marcar 3 caracteres a la derecha)
Después tan solo es marcar d para borrar.
```
2022-09-19 00:26:03 +02:00
Para más detalles se puede ver la ayuda
```
:h
:help {command} (por ejemplo, :help g_).
```
![](VIM-Cheat-Sheet.jpg)
Curso completo de vim: https://victorhck.gitbook.io/aprende-vim/
<br>
# Invítame a un café ☕️
<p>
<a href="https://www.buymeacoffee.com/manuelver"> <img align="left" src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" height="50" width="210" alt="https://www.buymeacoffee.com/manuelver" /></a>
</p>
<br><br><br>
[Manu](https://vergaracarmona.es) 😊