vim rules - skina it solutions · ¿cómo así que ágil y poderoso? tiempo en segundos invertido...

26
Vim Rules Ing. Ricardo Naranjo Faccini, M.Sc. 2019-04-12 https://skinait.com/vim-rules-Escritos-51/

Upload: others

Post on 13-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Vim Rules

Ing. Ricardo Naranjo Faccini, M.Sc.2019-04-12

https://skinait.com/vim-rules-Escritos-51/

Page 2: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom
Page 3: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

¿Qué es Vim?¿Qué es Vim?

● Editor de texto desarrollado en Editor de texto desarrollado en 1991.1991.

● Bram Moolenar.Bram Moolenar.● Curva de aprendizaje:Curva de aprendizaje:

– Difícil para los novatosDifícil para los novatos– Una vez se comprenden los conceptos, Una vez se comprenden los conceptos,

mediano.mediano.– Si es de uso diario:Si es de uso diario:

● EL MEJOR.EL MEJOR.● EL MÁS PODEROSO.EL MÁS PODEROSO.

● Ésta charla NO ES para novatos.Ésta charla NO ES para novatos.

Page 4: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

¿Qué tan viejo es Vim?¿Qué tan viejo es Vim?

● Primera idea: Charles HaleyPrimera idea: Charles Haley

● ex by Bill Joy (1976)ex by Bill Joy (1976)

– ex ex EEdit tedit teXXt →t →

– ed ed EDEDitor →itor →

– vi vi VIVIsual (full screen) →sual (full screen) →

– vim vim VIVI i iMMprovedproved

Page 5: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Diseño de VimDiseño de Vim

● Nunca levantar las manos del Nunca levantar las manos del teclado.teclado.

● Poder editar ágilmente archivos Poder editar ágilmente archivos de GRAN tamaño.de GRAN tamaño.

● Uso intensivo de expresiones Uso intensivo de expresiones regulares.regulares.

● Multiplicadores de instrucciones.Multiplicadores de instrucciones.● Generoso selector de rangos.Generoso selector de rangos.● Instrucciones de edición precisas Instrucciones de edición precisas

y programables.y programables.

Page 6: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Diseño de VimDiseño de Vim

● 4 modos de trabajo:4 modos de trabajo:– Modo normalModo normal

● Para visualizar el documentoPara visualizar el documento● Hacer búsquedasHacer búsquedas

– Modo ediciónModo edición● Para dar instrucciones que modifican el Para dar instrucciones que modifican el

textotexto● Se sale con Se sale con [[ESCESC]] o o [[CTRLCTRL]+[]+[[[]]

– Modo comandoModo comando● Múltiples comandos con gran poder.Múltiples comandos con gran poder.● Inicia con Inicia con [[::]]

– Modo visualModo visual● Para realizar selección de un rango.Para realizar selección de un rango.● Inicia con Inicia con [[vv]] o o [[CTRLCTRL]+[]+[vv][][ii]]

Page 7: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

¿cómo así que liviano?¿cómo así que liviano?

Memoria usada en KB para abrir un archivo en C de 60 bytes.

nano vim sublime Atom

1 MB 8MB 49 MB 256 MB 350 MB

MS VisualStudioCode

Page 8: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

¿cómo así que liviano?¿cómo así que liviano?

Memoria usada en KB para abrir un archivo XML de 6 Mbytes.

nano vim sublime Atom

1 MB 8MB 49 MB 810 MB 390 MB

MS VisualStudioCode

Page 9: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

¿cómo así que rápido?¿cómo así que rápido?

Tiempo en segundos para abrir un archivo XML de 6 Mbytes e ir hasta el final.

nano vim sublime AtomMS Visual

StudioCode

1 seg 4 seg 1 seg 17 seg 23 seg

Page 10: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

¿cómo así que ágil y poderoso?¿cómo así que ágil y poderoso?

Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra.

nano vim sublime Atom

600segs

4 segs 6 segs 800 +Segs.

DespuésDe

colgarseVariasveces

80 segs

MS VisualStudioCode

Page 11: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

¿Por qué?¿Por qué?

● ElectronElectron– Muy bonito, bastante buenoMuy bonito, bastante bueno

– Traga memoria como el ...Traga memoria como el ...

– Atom, MS VSCode, Slack y Spotify.Atom, MS VSCode, Slack y Spotify.

– Backend: node.js.Backend: node.js.

– Frontend: Chromium.Frontend: Chromium.

● SublimeSublime– Desarrollos nativos.Desarrollos nativos.

Page 12: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

A lo que vinimosA lo que vinimos

● En la charla no utilizaremos plugins En la charla no utilizaremos plugins extras.extras.

● Generalmente está preconfigurado en Generalmente está preconfigurado en su su .vimrc.vimrc, pero si no:, pero si no:– No actuar como vi pelaoNo actuar como vi pelao

● set nocompatibleset nocompatible– Resalte sintaxis con coloresResalte sintaxis con colores

● syntax enablesyntax enable– Para activar la búsqueda de archivosPara activar la búsqueda de archivos

● filetype plugin onfiletype plugin on– Para conocer el estado de una variablePara conocer el estado de una variable

● set set pathpath??– Para mostrarles lo que estoy haciendoPara mostrarles lo que estoy haciendo

● set showcmdset showcmd

Page 13: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

:version:version

Page 14: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

:set:set

Page 15: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Acceso a comandos del sistema y Acceso a comandos del sistema y al shellal shell● :!:!

– :! wc %:! wc %– :read :read archivo.txtarchivo.txt– :read ! :read ! md5sum *bz2md5sum *bz2– :read ! :read ! tree -L 2 -dtree -L 2 -d

● :shell:shell– [[CTRLCTRL]+[]+[dd]] en UNIX significa FIN DEL en UNIX significa FIN DEL

STREAM DE DATOS.STREAM DE DATOS.– Útil para finalizar una sesión de shell.Útil para finalizar una sesión de shell.– También para Wildcards.También para Wildcards.– Si no funciona, el tabulador es Si no funciona, el tabulador es

alternativa.alternativa.

Page 16: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Algunos TruquinisAlgunos Truquinis

● Búsqueda de archivosBúsqueda de archivos– :set path+=**:set path+=**– :set path+=:set path+=ruta/al/directorioruta/al/directorio– :set wildmenu:set wildmenu– :find :find archivoarchivo– [[gg][][ff]]; ; [[[[][][ff]];;[[]]][][ff]]; ; [[CTRLCTRL]+[]+[ww][][ff]]; …; …– Wildcards: Wildcards: [[**]] / / [[TABTAB]] / / [[CTRLCTRL]+[]+[dd]]– :help path:help path

Page 17: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Algunos TruquinisAlgunos Truquinis

● Navegación con marcadoresNavegación con marcadores– [[mm][][{a-zA-Z}{a-zA-Z}]]– [[`̀][][{a-zA-Z}{a-zA-Z}]]– :marks:marks

● SelectoresSelectores– [[vv][][→→]]; ; [[VV]]; ; [[CTRLCTRL]+[]+[vv][][ii]]

● Búsqueda de archivosBúsqueda de archivos– set path+=set path+=ruta/al/directorioruta/al/directorio– :find :find archivoarchivo– :set wildmenu:set wildmenu

● Indentar automáticamenteIndentar automáticamente– Ubicas el cursor en un { o un } yUbicas el cursor en un { o un } y

[[==][][ii][][{{] ] o o [[==][][ii][][}}]]– También con Selector y También con Selector y [[<<][][<<]] o o [[>>][][>>]]

Page 18: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Folding y marcadoresFolding y marcadores

● División de la ventanaDivisión de la ventana– :split división de la ventana→:split división de la ventana→– :vs división de la ventana→:vs división de la ventana→

● [[CTRLCTRL]+[]+[ww]] →→ cambio de ventanacambio de ventana● :diffthis:diffthis● :diffoff:diffoff

● Vim diffVim diff– vim -d arch1.txt arch2.txtvim -d arch1.txt arch2.txt

● [[dd][][pp]] → → diff put; diff put; [[dd][][oo] ] →→ diff obtaindiff obtain● [[]]][][cc] ] →→ next diff; next diff; [[[[][][cc] ] →→ previous diffprevious diff

● FoldingFolding– [[zz][][aa]]; ; [[zz][][AA]]; ; [[zz][][ff]]; ; [[zz][][dd]]; ; [[zz][][rr]]; ; [[zz][][RR]]– set fdm=set fdm=

{manual,indent,syntax,expr,marker,diff}{manual,indent,syntax,expr,marker,diff}– zfzf[rango][rango]

Page 19: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Folding y marcadoresFolding y marcadores

– [[zz][][ff][][movimientomovimiento]] Crear fold→ Crear fold→– [[zz][][ff][][aa][][{{{[<{[<}}]] Crear fold para → Crear fold para → {, [ o <{, [ o <– ::rangorango fold Crear fold→ fold Crear fold→– [[zz][][dd]] Borrar fold→ Borrar fold→– [[zz][][aa]] toggle→ toggle→– [[zz][][AA]] toggle all→ toggle all→– [[zz][][rr]]; ; [[zz][][mm]] incrementa/dec un nivel→ incrementa/dec un nivel→– [[zz][][RR]]; ; [[zz][][MM]] Abre/Cierra todos los f.→ Abre/Cierra todos los f.→– :mkview:mkview– set fdm=set fdm=

{manual,indent,syntax,expr,marker,diff}{manual,indent,syntax,expr,marker,diff}

Page 20: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Apoyo de ctagsApoyo de ctags

● Instalar ctags.Instalar ctags.– urpmi ctagsurpmi ctags– apt-get install ctagsapt-get install ctags– ……

● cd cd ruta/al/directorioruta/al/directorio● ctags -Rctags -R● Genera archivo “tags”Genera archivo “tags”

– [[CTRLCTRL] + [] + []]]]– gg[[CTRLCTRL] + [] + []]] ] resolver ambigüedades← resolver ambigüedades←– [[CTRLCTRL] + [] + [tt]]

Page 21: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

AutocompletarAutocompletar

● [[CTRLCTRL]+[]+[nn]] autocompletar.→ autocompletar.→– Funciones / instrucciones / variables / Funciones / instrucciones / variables /

constantes.constantes.– Del lenguaje.Del lenguaje.– De los ctags.De los ctags.– [[CTRLCTRL]+[]+[pp]] navegar en el menú.→ navegar en el menú.→– :help ins-completion:help ins-completion

Page 22: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

SnippetsSnippets

● Mapear nuestras propias Mapear nuestras propias secuencias de instrucionessecuencias de instruciones– :nnoremap XXXX YYYYY:nnoremap XXXX YYYYY– :nnoremap ,func :-1read ~/Plantillas/esq_funcion.php<CR>/(<ESC>i:nnoremap ,func :-1read ~/Plantillas/esq_funcion.php<CR>/(<ESC>i– :nnoremap ,html :-1read ~/Plantillas/esqueleto.html<CR>/<\/title<ESC>i:nnoremap ,html :-1read ~/Plantillas/esqueleto.html<CR>/<\/title<ESC>i– :nnoremap ,coment O//<ESC>40a-<ESC>yyppkllDa:nnoremap ,coment O//<ESC>40a-<ESC>yyppkllDa

– Básicamente: CUALQUIER COSABásicamente: CUALQUIER COSA– :n:n– noremap noremap – :-1:-1– readread– <CR><CR>– <ESC><ESC>

Page 23: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Macros y macros recursivasMacros y macros recursivas

● MacrosMacros– [[qq][][{a-zA-Z}{a-zA-Z}]]– Se despliega el indicador:Se despliega el indicador:

recording recording {a-zA-Z}{a-zA-Z}– Se indican las instrucciones que usted Se indican las instrucciones que usted

desee en el macro.desee en el macro.– [[qq]]: finaliza grabación del macro.: finaliza grabación del macro.– [[@@][][{a-zA-Z}{a-zA-Z}]]: Usar el macro.: Usar el macro.

● Macros recursivas.Macros recursivas.– Símplemente, dentro de la grabación del Símplemente, dentro de la grabación del

macro macro xx indicar la instrucción indicar la instrucción [[@@][][xx]]– El macro El macro xx no debe tener nada asignado no debe tener nada asignado

Page 24: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

ConclusionesConclusiones

● Vim no es EL MEJOR editor.Vim no es EL MEJOR editor.● Vim es EL MEJOR editor bajo cierto Vim es EL MEJOR editor bajo cierto

contexto.contexto.● Ningun editor puede decir que es EL Ningun editor puede decir que es EL

MEJOR editor en todo contexto.MEJOR editor en todo contexto.– Vim tiene características mejores Vim tiene características mejores

que otros editores.que otros editores.– Vim tiene características peores Vim tiene características peores

que otros editoresque otros editores● Éso sucede con TODO el software, Éso sucede con TODO el software,

tanto libre como privado.tanto libre como privado.

Page 25: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

BibliografíaBibliografíahttps://www.skinait.com/manual-de-vi-Escritos-40/https://www.skinait.com/manual-de-vi-Escritos-40/

https://www.youtube.com/playlist?list=PLv6CkzbbGAlWf0ViDHLf4X5q4I0G3wp0Jhttps://www.youtube.com/playlist?list=PLv6CkzbbGAlWf0ViDHLf4X5q4I0G3wp0J

https://www.linux.com/learn/vim-tips-folding-funhttps://www.linux.com/learn/vim-tips-folding-fun

https://vim.fandom.com/wiki/Foldinghttps://vim.fandom.com/wiki/Folding

http://vimregex.com/http://vimregex.com/

https://www.computerhope.com/unix/uex.htmhttps://www.computerhope.com/unix/uex.htm

https://vim.fandom.com/wiki/Make_views_automatichttps://vim.fandom.com/wiki/Make_views_automatic

https://youtu.be/XA2WjJbmmoMhttps://youtu.be/XA2WjJbmmoM

https://vimways.org/2018/https://vimways.org/2018/

https://medium.com/commitlog/why-i-still-use-vim-67afd76b4db6?hhttps://medium.com/commitlog/why-i-still-use-vim-67afd76b4db6?h

http://blog.joncairns.com/2012/05/using-vim-as-a-php-ide/http://blog.joncairns.com/2012/05/using-vim-as-a-php-ide/

https://opensource.com/article/19/1/vim-plugins-developershttps://opensource.com/article/19/1/vim-plugins-developers

https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/

https://opensource.google.com/projects/vim-pluginshttps://opensource.google.com/projects/vim-plugins

https://jovicailic.org/2018/06/recursive-macros-in-vim/https://jovicailic.org/2018/06/recursive-macros-in-vim/

Page 26: Vim Rules - Skina IT Solutions · ¿cómo así que ágil y poderoso? Tiempo en segundos invertido para buscar y reemplazar 100.000 instancias de una palabra. nano vim sublime Atom

Muchas Gracias

¿Preguntas?Vim Rules (https://skinait.com/vim-rules-Escritos-51/) por Ricardo Naranjo Faccini se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional.