vim
/vía: https://www.catswhocode.com/blog/vim-cheat-sheet-for-2016
/vía:http://www.catswhocode.com/blog/130-essential-vim-commands
info
Plugins/extensiones/personalización
Pendiente: modificación status line
https://kadekillary.work/post/statusline/Pendiente: modificación status line
https://gist.github.com/millermedeiros/1262085- gestión/instalación plugins en sus propios directorios (runtimepath): https://github.com/tpope/vim-pathogen
- crear dos directorios:
~/.vim/autoload(ubicación vim-pathogen.vim) y~/.vim/bundle(home_directory de los plugins) - modificar .vimrc añadiendo
execute pathogen#infect()
- stateline.vim (requiere pathogen.vim):
cd ~/.vim/bundle git clone https://github.com/millermedeiros/vim-statline.git
config
# cambiar editor por defecto $ sudo update-alternatives --config editor
Basics
- [N] acción moción
- acciones:
- d - delete
- c - caracter sustitución
- >,< - indentación, desindentación
- gU,u - uppercase
- y - copiar
- moción
- w - palabra
- e - final de palabra
- b - palabra anterior
- ^ - principio de línea
- $ - final de linea
- gg - principio documento
- G - final de documento
- iw - inside word
- aw - arorund word
- . - repite última edición
more Basics
:efilename : Open filename for edition:w: Save file:q: Exit Vim:q!: Quit without saving:x: Write file (if changes has been made) and exit:savfilename : Saves file as filename.: Repeats the last change made in normal mode5.: Repeats 5 times the last change made in normal mode
Moving in the file
0: move the cursor to the begining of the lineGo$: move the cursor to the end of the filegg: move the cursor to the begining of the file:59: move cursor to line 59. Replace 59 by the desired line number.k or Up Arrow: move the cursor up one linej or Down Arrow: move the cursor down one linee: move the cursor to the end of the wordb: move the cursor to the begining of the wordL: move the cursor to the bottom of the screen20|: move cursor to column 20.%: Move cursor to matching parenthesis[[: Jump to function start[{: Jump to block start
Cut, copy & paste
y: Copy the selected text to clipboardp: Paste clipboard contentsdd: Cut current lineyy: Copy current liney$: Copy to end of lineD: Cut to end of line
Search
/word: Search word from top to bottom?word: Search word from bottom to top* : Search the word under cursor/\cstring: Search STRING or string, case insensitive/jo[ha]n: Search john or joan/\< theSearch the, theatre or then/the\>: Search the or breathe/\< the\>: Search the/\< ¦.\>: Search all words of 4 letters/\/: Search fred but not alfred or frederick/fred\|joe: Search fred or joe/\<\d\d\d\d\>: Search exactly 4 digits/^\n\{3}: Find 3 empty lines:bufdo /searchstr/: Search in all open filesbufdo %s/something/somethingelse/g: Search something in all the open buffers and replace it with somethingelse
Replace
- comando:
:[rango]s[ubstitute]/{pattern}/{string}/[flags] [count]
- Rango:
%: de la primera a la última línea1,3: de la línea 1 a 33,$: de la línea 3 al final de fichero
- Flags:
g: global (en el ámbito, todas las sustituciones posibles)i: case insensitivec: confirmación
- Pattern:
string: busca la cadena^: principio de línea$: final de línea
- Ejemplos:
:s/Bill/Steve/: Replace the first occurence of Bill by Steve in current line:s/Bill/Steve/g: Replace Bill by Steve in current line:2,35s/old/new/g: Replace all occurences between lines 2 and 35:5,$s/old/new/g: Replace all occurences from line 5 to EOF:%s/old/new/g: Replace all occurences of old by new in file:%s/onward/forward/gi: Replace onward by forward, case unsensitive:%s/old/new/gc: Replace all occurences with confirmation:%s/^/hello/g: Replace the begining of each line by hello:%s/$/Harry/g: Replace the end of each line by Harry:%s/onward/forward/gi: Replace onward by forward, case unsensitive:%s/ *$/ /g: Delete all white spaces:%s/Bill/Steve/g: Replace Bill by Steve in all the file:%s/^M/ /g: Delete DOS carriage returns (^M):%s#\s#\r#g: cambia espacios (\s) por saltos de línea (\r) en todo el texto. Usamos # como separador:%s/\r/\r/g: Transform DOS carriage returns in returns:%s#<[^>]\+>##g: Delete HTML tags but keeps text:%s/^\(.*\)\n\1$/\1/: Delete lines which appears twice:g/string/d: Delete all lines containing stringg/^$/d: borra líneas en blanco →v/./dg/^\s*$/d: borra líneas en blanco o con espacios/tabuladores- más ejemplos: https://vim.fandom.com/wiki/Power_of_g
:v/string/d: Delete all lines containing which didn’t contain string
Ctrl+a: Increment number under the cursorCtrl+x: Decrement number under cursorggVGg?: Change text to Rot13
Case
Vu: Lowercase lineVU: Uppercase lineg~~: Invert casevEU: Switch word to uppercasevE~: Modify word caseggguG: Set all text to lowercasegggUG: Set all text to uppercase:%s/\<./\u&/g: Sets first letter of each word to uppercase:%s/\<./\l&/g: Sets first letter of each word to lowercase:%s/.*/\u&: Sets first letter of each line to uppercase:%s/.*/\l&: Sets first letter of each line to lowercase
Read/Write files
:1,10 w outfile: Saves lines 1 to 10 in outfile:1,10 w >> outfile: Appends lines 1 to 10 to outfile:r infile: Insert the content of infile:23r infile: Insert the content of infile under line 23
File explorer
:e .: Open integrated file explorer:Sex: Split window and open integrated file explorer:Sex!: Same asSexbut split window vertically:browse e: Graphical file explorer:ls: List buffers:cd ..: Move to parent directory:args: List files:args *.php: Open file list:grep expression *.php: Returns a list of .php files contening expressiongf: Open file name under cursor
Interact with Unix
:!pwd: Execute the pwd unix command, then returns to Vi!!pwd: Execute the pwd unix command and insert output in file:sh: Temporary returns to Unix$exit: Returns to Vi
Alignment
:%!fmt: Align all lines!}fmt: Align all lines at the current position5!!fmt: Align the next 5 lines
Tabs/Windows
cli
vim -p <archivo1> <archivo2>
manejo
:tabnew: Creates a new tab:tabe[dit] <file>: abre <file> en nuevo tab:tabf[ind] <file>: abre <file> en nuevo tab buscando por el path:set path=.,,**: busca en la ubicación del archivo, en el directorio actual y en los subidrectorios
:tabclose:tabonly: cierra todos los tabs menos el actual:tab split: duplica el tab actual
:tabdo %s/foo/bar/g: Execute a command in all tabs:tab ball: Puts all open files in tabs:new abc.txt: Edit abc.txt in new window:qaowqa: salir de todas las pestañas
movimiento
gt: Show next tab:tabn^PgUp
gT: Show previus tab:tabp: Show previus tab^PgDw
:tabs: muestra todos los tabs:tabfirst: Show first tab:tablast: Show last tab
:tabm n: reorganizar tabs0: mover actual a la primera posición: mover actual a la última posiciónn: mover actual a la posición n
Window spliting
:e filename: Edit filename in current window:split filename: Split the window and open filenamectrl-w up arrow: Puts cursor in top windowctrl-w ctrl-w: Puts cursor in next windowctrl-w_: Maximize current window verticallyctrl-w|: Maximize current window horizontallyctrl-w=: Gives the same size to all windows10 ctrl-w+: Add 10 lines to current window:vsplit file: Split window vertically:sview file: Same as :split in readonly mode:hide: Close current window:nly: Close all windows, excepted current:b 2: Open #2 in this window
Auto-completion
Ctrl+n Ctrl+p (in insert mode): Complete wordCtrl+x Ctrl+l: Complete line:set dictionary=dict: Define dict as a dictionnaryCtrl+x Ctrl+k: Complete with dictionnary
Marks
m {a-z}: Marks current position as {a-z}' {a-z}: Move to position {a-z}' ': Move to previous position
Abbreviations
:ab mail mail@provider.org: Define mail as abbreviation of mail@provider.org
Text indent
ctrl-t, ctrl-d: Indent/un-indent in insert mode»: Indent«: Un-indent=%: Indent the code between parenthesis1GVG=: Indent the whole file
cifrado
:X: pregunta por contraseña para cifrar el fichero a la hora de guardar:setlocal cm?: show encryption method for the current file (cm abreviación de cryptmethod:setlocal cm=zip: weak (default for backwards-compatibility):setlocal cm=blowfish: better:setlocal cm=blowfish2: best (requires Vim version 7.4.399 or higher)
Modelines
mirar e integrar
http://vim.wikia.com/wiki/Modeline_magicpermite modificar el comportamiento del editor (emacs o vim - u otros?) con líneas con estructura
activar
por defecto (y razones de seguridad) viene desactivado. Se han de cumplir estas condiciones:
set modelineestá activo (y noset nomodeline)modelines ≠ 0- no eres root
:verbose set modeline? modelines?: mirar si está activo
:e $MYVIMRC set modeline set modeline=5
SETs
búsquedas
set (no)ignorecase[ic]set (no)hlsearch[hls] : marca la búsquedaset (no)incsearch[is]set (no)showmatch[sm]set (no)ignorecase[ic]set (no)incsearch[is]
indentación
:set (no)autoindent[ai] : Turn on auto-indent:set smartindent[si] : Turn on intelligent auto-indent:set shiftwidth=4: Defines 4 spaces as indent size
Syntax highlighting
:syntax on: Turn on syntax highlighting:syntax off: Turn off syntax highlighting:set syntax=perl: Force syntax highlighting
ayudas
set (no)cursorline[cul]: línea del cursor «subrayada»- modificar estilos (ojo, también incluye para columna):
- http://vim.wikia.com/wiki/Highlight_current_line
" \c para activar/desactivar :hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white :hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white :nnoremap <Leader>c :set cursorline! cursorcolumn!<CR>
set (no)number[nu]: numeración de líneasset (no)ruler[ru]: muestra información de posición del cursor y % de la páginaset (no)invlist: muestra caracteres especialesset (no)paste: evita autoindentación de código «pegado»set pastetoggle=<F2>- <code vim .vimrc>nnoremap <F2> :set invpaste paste?<CR>
set (no)list: visualiza caracteres «ocultos» según establecido: set listchars=space:·,eol:$,tab:>-,trail:~,extends:>,precedes:<[lcs]: help listchars[lcs]
set pastetoggle=<F2> set showmode</code
otros
:set smartcaseIgnore case in searches excepted if an uppercase letter is used:set key=<password>: otra manera de establecer contraseña (se ve la pass, se puede poner en fichero .vimrc)