ViTips

Algunos trucos útiles para usar el programa de edición de textos vim.

Links de interés #

Activar coloreado de sintaxis #

En modo comando escribimos:
:syntax on
Si queremos tener el coloreado de sintaxis de forma automática, deberíamos crear/editar un fichero .vimrc en nuestra $HOME y añadir en él la siguiente línea:
syntax enable

Completado de palabras #

Vim almacena las palabras tecleadas mientras escribimos. Durante la edición de un texto (modo insert) podemos completar una palabra mediante el comando:
Ctrl + P o Ctrl + N
donde P significa previous y N de next en la lista de palabras. Pulsando los comandos varias veces recorreremos la lista de posibles maneras de completar la palabra que estamos escribiendo. Se pueden definir un diccionarios personal en el .vimrc, por ejemplo, para acceder a diccionarios de palabras, funciones o textos frecuentes.
set dictionary=/usr/share/aspell/es.rws
set complete=.,w,k

Búsquedas #

Para esto se utilizan los comandos / (hacia delante) o (hacia atrás) Búsqueda hacia delante del patrón "foo":
/foo
Búsqueda hacia atrás del patrón "foo":
?foo
Para situarse en el siguiente elemento se pulsa la letra n y en el caso de situarse en el elemento anterior N (SHIFT-n)

Concatenar un archivo #

:r foo.txt

Ir a #

Ir al inicio del documento:
:1
Ir al final del documento:
:$
Ir a la línea 666:
:666

Ver números de línea #

:set number!

Ver caracteres especiales de control #

:set list

Salir a la shell sin salir de la sesión de vi #

:shell
Para volver al fichero: <Crtl>-D

Ejecutar un comando de shell desde vi #

:! who -r
También puedes concatenar un comando de shell:
:r! who -r

Reemplazar cadenas #

Muchas veces se quiere buscar y reemplazar una cadena de texto. Para esto se utiliza el comando

En todos los ejemplos se sustituye foo por bar

Reemplazo en la línea actual (solo una vez)

:s/foo/bar/
Reemplazo en la línea actual (las veces que ocurra en la línea)
:s/foo/bar/g
Reemplazo entre las líneas 12 y 25 (las veces que ocurra)
:12,25s/foo/bar/g
Reemplazo desde la línea 12 hasta el final (las veces que ocurra)
:12,$s/foo/bar/g
Sustituye el patrón de búsqueda por el de reemplazo en todo el fichero (las veces que ocurra)
:%s/foo/bar/g
Reemplaza solicitando confirmación.
:%s/foo/bar/gc

Definir asociaciones de teclado #

Los comandos más frecuentes de vi pueden definirse en el .vimrc mediante el comando map
" Set keyboard mappings
map <F1> :wq<CR>             
map <F2> :set number!<CR>   
map <F3> :set ff=dos<CR>     
map <F4> :set ff=unix<CR>
map <F5> :<C-]><CR>
map <F6> :<ESC><C-w><down>
map <F7> :<ESC><C-w><up>
map <F8> :<ESC>gqap<CR>
map Q gq                     " Don't use Ex mode, use Q for for

Convertir una línea a mayúsculas #

En .vimrc
map <F9> :s/\([A-Z]\)\([A-Z][A-Z]*\)/\1\L\2/g
Edita un documento y en una línea pulsa F9.

Desactivar el auto-index al copiar texto #

Muchas veces al editar archivos con el vi nos e intentar copiar desde otro fichero (boton del centro del ratón o ctrl+C ctrl+V) el motor del vi decide indentar el texto copiado.
public void metodo()
 {
   una linea
       otra linea
          otra linea más
            }
cuando en realiadad el texto original era
public void metodo()
{
  una linea
  otra linea
  otra linea más
}
Para evitar este comportamiento basta con utilizar el siguiete comando :set noautoindent o su expresión abreviada :set noai Otra forma de evitarlo en activar el modo paste antes de hacer la copia :set paste y desactivarlo después de realizar la copia :set nopaste

Cómo salvar una página de man para editarla en vi ? #

$ man ls | col -b > ls.txt

Ejemplo de archivo .vimrc #

"filetype plugin on                  " plugin on
"set mouse=a                         " mouse mode(gvim)
"set backup                          " keep a backup file
"colorscheme cesar                   " cesar colors
set nocompatible                     " vim settings
set dictionary=/usr/share/dict/words " set words dictionary 
set complete=.,w,k                   " completion
set grepprg=grep\ -nH\ $*            " grep command
set sw=2
set iskeyword+=:
set backspace=2                      " allow backspacing over everything in insert mode
set laststatus=2                     " show status line
set showmode                         " shows INSERT in the status line while in insertmode
set ruler                            " show the cursor position all the time
set showmatch                        " show matching parenthesis
set showcmd                          " show current uncompleted command
set history=100                      " keep 100 lines of command line history
set noic                             " do not Ignore case on search
set noai                             " do not Ignore case on search
set incsearch                        " show immediately where the so far typed pattern matches
set virtualedit=all                  " tables

" Set keyboard mappings
map <F1> :wq<CR>
map <F2> :set number!<CR>
map <F3> :set ff=dos<CR>
map <F4> :set ff=unix<CR>
map <F5> :<C-]><CR>
map <F6> :<ESC><C-w><down>
map <F7> :<ESC><C-w><up>
map <F8> :<ESC>gqap<CR>
map Q gq                             " Don't use Ex mode, use Q for formatting

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif

" viminfo
set viminfo='10,\"100,:20,%,n~/.viminfo
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
Promedio (0 Votos)
Comentarios