Inicio    Contáctenos  Qué es DatoSoft Descargas


Datos y Software - Soluciones

 

DatoSoft


Datos y Software - Soluciones

 

 

Ir a otros temas...

 

Titulo del tema



INTRODUCCION

Pendiente de editar

CONTENIDO

 

 

vim editor

Para ver el archivo de ayuda:
: help o simplemente el comando :h
:help motion da ayuda sobre las ordenes de motion (movimiento) etc.
Ctrl-T o Ctrl-o regresa a la posición previa de la ayuda.
En general ctrl-o brinca en las posiciones hacia atrás y ctrl-i brinca hacia adelante.
:help ope Ctrl-d en vez de Enter muestra todos los temas de ayuda que contengan las letras ope., Ej:
:help ope <Ctrl-d>
:open cscope 'nocscopetag'
'open' Cscope cscopeverbose
operator :cscope cscope-options
'operatorfunc' +cscope 'cscopeverbose'
opening-window :scscope cscopetagorder
:map-operator :lcscope cscopepathcomp
zOS-open-source :foldopen cscopequickfix
new-operator-mod 'slowopen' cscope-howtouse
OS390-open-source 'foldopen' cscope-commands
visual-operators cscopetag 'cscopequickfix'
win32-open-with-menu cscopeprg 'cscopepathcomp'
blockwise-operators 'cscopeprg' 'cscopetagorder'
new-define-operator 'cscopetag' 'nocscopeverbose'
Operator-pending cscope-find cscope_connection()
Operator-pending-mode cscope-info cscope-limitations
:cope :folddoopen cscope-suggestions
:lopen cscope-win32
:copen cscope-intro


FUNDAMENTOS:
Forma general de los comandos
[n] operator [m] object
n es el número de veces que el operador se ejecuta
m es el número de objetos
Si ambos se especifican entonces es m*n
Comandos son:
c (change), d (delete), y (yank), w, b, gg, /, n, Ctrl-G, m etc.
Algunos son con una sola letra, otros con dos, otros con : y otros con Ctrl.
La mayoría se hacen en el modo normal, otros estando en el de inserción como
Ctrl-W(borra palabra), Ctrl-U (borra línea) Ctrl-T inserta indent, Ctrl-d lo borra etc.

Objetos representan un bloque de texto:
(word, frase, paragrafo o sección)
Se pueden representar por un comando de movimiento de cursor o un pattern-matching.
2cw borra las siguientes dos palabras e inicia el modo de inserción
d} delete hasta el siguiente paragrafo
La mayoría de los comandos no se ven en la pantalla pero algunos se ven en la
última línea de la pantalla: / ? : !

Si la línea actual es el object de la operación, el operador es igual al objeto,
cc, dd, yy etc.

La filosofía de VIM es usar visual mode cuando no se aplique a un objeto conocido.
Ctrl-Q activa visual block (Ctrl-V e linux) para columnas etc.
Shift-V o V activa visual line
v activa el modo visual normal


----------------------------------------------------------

Para activar la corrección ortográfica en inglés: (viene por defecto)
:setlocal spell spelllang=en_us
:digraphs
muestra todos los caracteres extras que se pueden obtener pulsando ctrl-K y luego dos teclas

Operaciones de movimiento
gg Va al inicio del archivo
G a la ultima linea
G$ al final del archivo
$ o end al final de la linea
'' va a la posición previa (hay mas en la sección de la ayuda sobre marcas)
Ctrl-o brinca hacia atrás a las posiciones previas, (Flechas en firefox)
Ctrl-i brinca hacia adelante
0 o home al inicio
Para moverse con letras y no con flechas, asociar la j con una flecha
apuntando hacia abajo.
% Ubicándose en una { o [ o ( etc., brinca a la pareja.
En archivos de programación, gd va a la declaración local de una variable
[{ nos lleva al inicio de un bloque en lenguaje C.

Esc conmuta del modo de entrada al de órdenes.
a (añade) o i (inserta) o ins llevan del modo de órdenes al de entrada
La mejor parte de la ayuda es el |howto do common things|
No todos los comandos son con ":", por ejemplo u va deshaciendo de una (este es el sentido del modo de órdenes), ^R rehace inmediatamente, etc, mas bien aquellos que requieren informacion adicional o parámetros, son los que requieren los :
Sin embargo para deshacer movidas de bloques o copiados toca :u
En la ayuda usar ^] (CTRL-]) para seguir los enlaces de los tags, sin necesidad de usar Alt Gr.
El archivo de configuración de vi es .vimrc y se encuentra en el raíz del
usuario.

Para afectar una region de texto se puede hacer de tres maneras:
1. Con visual mode, dando la orden v, iluminando y luego el operador,
2. Dando el operador y luego una orden de movimiento
3. Dando un rango y luego el comando
Ejs:
Con visual mode: se da v, se ilumina y luego gU, para poner mayusculas.
O dando gU y luego una orden para mover, como w, o flecha para abajo, o
$ para ir al final de linea etc. entonces hasta donde se mueve queda
afectado, en este caso con mayúsculas.
:1,5s/this/that/g
Executes the substitute command on the lines 1 to 5. Line 5 is included.
Por ejemplo para reemplazar (substitute) en todo el documento la palabra hola por la palabra asi:
:%s/hola/asi/g
/g es un flag que indique que reemplaze todas las palabras en cada línea y no solo la primera
Con dos flags: el g que ya sabemos y la i para que ignore mayúsculas
:%s/hola/asi/gi
Typear :help :substitute para la ayuda completa

Sobre rangos:

The ":substitute" command, and many other : commands, can be applied to a
selection of lines. This is called a range.
The simple form of a range is {number},{number}. For example: >
:1,5s/this/that/g
Executes the substitute command on the lines 1 to 5. Line 5 is included.
The range is always placed before the command.

Otras maneras de especificar rangos:
Todo el archivo: 1,$ o simplemente %
Con un solo número: :54s/President/Fool/
Con un punto para indicar la línea actual:
:.write otherfile Escribe la linea actual en un archivo.
to substitute in the lines from the cursor to the end: :.,$s/yes/no/

También se puede rangos indicados por patrones de búsqueda:
:?^Chapter?,/^Chapter/s=grey=gray=g sustituye grey con gray desde donde se
encuentre la palabra Chapter hacia atrás hasta la palabra Chapter hacia delante.
Otro ejemplo:
:%s/
//g En todo el buffer sustituye
por nada. Sirve para arregla archivos que en vez de tener CR LF tiene CR CR
En windows toca pegar del clipboard a
.
En linux: :%s/^V^M//g

:/My_Opinion/,$s/Windows/Linux/
Search forward from the current line to the next line containing "My_Opinion", and from that line to the end of file substitute "Linux" for "Windows". The search WILL NOT match any "My_Opinion" on the current line, and instead will match the next downward occurrence of "My_Opinion".


Algunos operadores: (trabaja con cualquier comando de movimiento)
gu (texto a lowercase), gU (texto a uppercase), gq, >, < etc.
gUw pasa a mayuscula la palabra (word). Todos los comandos que no sean con
los dos puntos se pueden repetir con el comando "."

You can read a file in DOS format and write it in Unix format. This will
replace all <CR><NL> pairs by <NL> (assuming 'fileformats' includes "dos"): >
:e file
:set fileformat=unix
:w
If you read a file in Unix format and write with DOS format, all <NL>
characters will be replaced with <CR><NL> (assuming 'fileformats' includes
"unix"): >
:e file
:set fileformat=dos
:w

Sobre ctags.exe
http://ctgas.sourceforge.net

Comandos comunes: (ver pág 98 del Manual de Referencia de Unix)
Búsquedas:
/ palabra busca palabra
/\cpalabra hace busqueda insensible a mayusculas
/Cpalabra hace busqueda forzando sensibilidad a mayusculas (el default)
/ y ENTER repite búsqueda o simplemente # de una
? busca hacia atras
La búsqueda acepta expresiones regulares de una, por ejemplo:
/^hola busca hola al principio de la línea
/hola$ busca hola al final de la línea
/^hola$ busca hola sola en la línea
/c.m busca c, cualquier caracter y m
/hola\. busca "hola."
/\<sum\> busca la palabra exacta sum \< es inicio de palabra \> es fin de la palabra
Con set se colocan otras opciones,
:noh (SIN EL :set) limpia temporalmente el resaltado pero al hacer una nueva búsqueda se activa
:set nohlsearch para quitar el resaltado de ahí en adelante.
:set incsearch para búsqueda incremental etc.
* busca hacia adelante la palabra que está sobre el cursor
# busca hacia atrás la palabra que está sobre el cursor
g* y g# igual pero realiza búsquedas parciales
Toda la información está en VIM reference manual secciones search y subsiguientes
:options Navegador para colocar opciones tipo set
:e . Navegador para edit un fichero
u deshace
J une dos lineas quitando el ENTER
. Repite el ultimo comando
^R rehace
20 va a la linea 20
:20 hace lo mismo
h ayuda
wq sale grabando
x sale grabando
:X guarda el fichero encriptado
q o q! sale
To count the words in a file: g<ctrl-g>
To count the words in a block, select the block and once again g<ctrl-g>
Para ver todos los comandos que empiezan con tçg, :help g
Con :help z también hay un montón.
Para ordenar líneas: definir el bloque con modo visual y luego :!sort

COPIAR Y PEGAR:
v inicia bloque (visual mode) y luego :
y (yank) lo lleva buffer para hacer p (paste) en otro lado.
x para cortar y luego p (paste) para pegar.
:reg muestra los registros (las memorias de copiado y pegado)
"0p pega los del registro 0
"4p lo del registro 4 etc (sin los dos puntos).
Para pegar en un registro nombrado por uno: "{letra}
Ej: "a, el siguiente pegado, borrado o yank se hará ahí.
Ej: Para pegar repetidamente un bloque de texto basta con pulsar paste repeditamente.
O Se selecciona con visual mode y:
Se pulsa "1y (yank en el registro 1) (o en cualquier otro registro)
Se pulsa "1p (paste lo del registro 1)
gv vuelve a seleccionar la última selección
Se puede utilizar el modo visual para restringir los efectos de una órden, por ejemplo
substitue solo reemplazará en lo seleccionado.
Ctrl-A selecciona todo

2,4m:6 mueve las lineas desde la 2 a la 4, y las coloca en la 6
:113898,702486y yank el rango de líneas especificado
El único método para copiar y pegar bloques es el visual.

Puede tambien hacerse algo como movimiento, yank y luego paste,
Ej; $y, lo que copiaria desde donde nos movimos hasta el final de la línea.

Marcas:
marks: Para crearlas, en modo de orden pulsar m(letra) sin los dos puntos. Ej: ma, mb ...
Para ir a la marca usar 'a 'c etc. que lleva a la línea
O `a `c etc que lleva al punto exacto. (Recordar que debe
pulsarse ` luego la barra espaciadora y ahí si la letra
Marcas predefinidas : [ al inicio del archivo ] al final del archivo
:marks las lista

daw (delete a word incluyendo el espacio)
diw lo mismo pero sin incluir el espacio
D borra hasta el final de la linea
:r leer fichero a partir de la posicon actual del cursor
:! ir al shell

En general las opciones de configuracion booleanas son:
: set opcion, o
: set noopcion
: set autoread, si no hay cambios en el fichero y otro programa lo cambio, auto/te lo recarga.
Para que no pite:
:set vb t_vb=
set vb hace que en vez de pitar, flashea
set novb lo pone otra vez al default.
:set ignorecase o set ic
:set noignorecase o set noic
Se puede especificar también en la propia cadena de búsqueda añadiéndole en cualquier parte \c.
\C hace lo opuesto: forza "matching case", (set noignorecase)
Para ver como tenemos las opciones de configuración:
Tomado de :help set
:set all me muestra como están todas las opciones en VIM
:se[t] Show all options that differ from their default value.
:se[t] all Show all but terminal options.
:se[t] {option}? Show value of {option}.
:se[t] {option} Toggle option: set, switch it on.
Number option: show value.
String option: show value.
:se[t] {option}& Reset option to its default value. May depend on the
current value of 'compatible'. {not in Vi}
Ejemplos:
:set fileencoding? Muestra el encoding para el buffer actual (si no está definido es el default)
:set fileencodings? Muestra los encodings utilizados al tratar de interpretar un archivo.

Para ver como esta configurada la opcion: :set opcion? ej: :set ignorecas?
:set muestra las cambiadas con respecto al default
:help set para ayuda
:options para verlas todas

Tomado de: Guia-Vim.pdf
set modelines=10 hace que la línea con variables de fichero sea buscada entre las 10 primeras y 10 últimas

La idea es que en vez de utilizar .vimrc para establecer valores de funcionaminto de Vim, se utilizen cierta líneas del propio archivo de texto.
Estas deben estar al principio o al final del archivo (se cambia con set modelines=)

El formato de estas líneas es el siguiente:
«[texto] vim:set {opción}={valor} ...: [texto]»
Donde
1. «[texto]» representa cualquier texto. Puede ser una marca de comentarios
para el lenguaje en el que se encuentre el fichero. Por ejemplo
en programas para C++ habría que colocar al principio de la línea los
caracteres "//" para que el compilador de C++ la ignore y la trate como
un comentario. En programas de C habría que colocar, al principio "/*"
y al final "*/", en ficheros LATEX el carácter "%" y en ficheros de tipo
make el carácter "#".
2. El texto «vim:» es el que hace a Vim reconocer a esa línea como conteniendo
un grupo de variables de fichero. Si la línea no empieza con ese texto, debe haber un espacio en blanco antes de él.
Ej: « % vim: tw=75 ts=3 sw=3 ai»
lo que significa que se establece el ancho de línea a 75 caracteres, el tabulador a tres caracteres y los niveles de sangrado a 3 caracteres, al tiempo que se activa la autoindentación.
Otro ejemplo: la última línea de la ayuda de VIM tiene:
vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:
Por ahora no se que configura...

En modo de ordenes (sin escribir los :))
yy (sin los dos puntos en modo de ???) yank la linea actual, luego p (paste))
yw yank la palabra, desde donde este el cursor hacia adelante. Para la palabra
completa ubicarse al inicio de la misma.
w avanza una palabra
b avanza una palabra hacia atras

Si se quiere grabar como otro:
:w nombreFicheroNuevo

Si se quiere editar otro sin salir de vi:
:e fichero (:edit fichero)
:edit . para que muestre un explorador de archivos
El comando edit tiene varios argumentos, ver en la ayuda, uno de ellos es:
:e[dit] [++opt] [+cmd]
[++opt] es para cosas como el formato del archivo, su encoding o si es binario.
Ej: :w ++enc=latin1 Graba el archivo con el encoding especificado
La conversión mas breve de DOS a Unix es: :w ++ff=unix

[+cmd] es para dar algún comando al momento de abrir el archivo
Ejemplo: :edit +set\ dir=c:\\\\temp file
:e! Revert to the last saved version of the current file.
Para ver la diferencia entre dos archivos
:edit main.c
:vertical diffsplit main.bak

Para editar varios archivos:
:args *.txt para terminar de editar los ficheros actuales y editar los *.txt
:hide edit file para editar otro archivo sin dejar el actual
:args file1 file2 file3 similiar a :args *.txt
:previous
:next o :n
:last
:first
:wnext va al siguiente archivo y graba por ahi derecho el actual
:wprevious
:args muestra la lista de files
:argdo %s/<palabra1\>/palabra2/ge |update
Reemplaza la palabra1 (complete word) con palabra2. g es global y no solo en la primera
ocurrencia de la línea, e es para que no aborte si no encuentra en un archivo, | separa dos
comandos, update graba el archivo si sufrió algún cambio
:set autowrite para automaticamente grabar al dar next o previous
:buffers muestra el listado de los buffers abiertos.
ctrl-^ va cambiando entre los buffers
:b 1 lleva al bufer 1 etc.

5. EX commands (los de :)
En general todos los comandos están en REFERENCE MANUAL, index.txt

INTERNACIONALICACION, ENCODING
Consultar set enc (encode)
En vimrc es donde se coloca set enc=utf-8 etc.
Por defecto VIM se acomoda al ambiente donde se instala, en windows el predeterminado es Windows ANSI,
pero si se abre un archivo que está en UNICODE se adapta y lo trabaja correctamente, salvo si esta en UTF-8,
caso en el cual no muestra bien tildes y eñes. Se puede verificar grabando con pspad un archivo en ese
formato y luego intentar abrilo en vim.
Para solucionar esto en vimrc, colocar:
set fileencodings=ucs-bom,utf-8,8bits-1252,latin-1
Este es un listado de los encodings que tratará de usar.
:help bomb explica bom (byte order mark)
ucs es Universal character set (está en wikipedia)
Para insertar caracteres especiales al estilo del DOS, se usa en windows Ctlr-Q pero estando en modo de inserción.
Ctrl-Q 126 y barra espaciadora pone la ~ etc.
Si estamos en un caracter y queremos saber su número ASCII pulsamos ga
Si queremos saber en UTF-8 cual es, pulsamos g8
You can reload a file using a different encoding if vim wasn't able to detect the correct encoding:
:e ++enc=<encoding>
For example, on Windows in western Europe, the default encoding is latin1. However I often use vim to edit batch files they must be encoded using the console codepage which is is usually cp850 or cp437. So I reload the file using this command:
:e ++enc=cp850
See: :h ++enc y :h encoding-values para una lista de los posibles nombres
set encoding establece el ambiente general para el juego de caracteres.
set encoding= 8bit-cp1252 (es el mismo ANSI de Windows)
2byte-cp1252
utf8
:e ++enc=latin1 es para que haga caso omiso del encoding actual y cargue el archivo con el especificado.
En el redhat 8.0 de la ucc y en el ubuntu 6.10 no se podía ni siquiera escribir directamente tildes y eñes en un archivo nuevo, pues salían caracteres raros. Tocó set termencoding=latin1 , aunque en ubuntu el archivo internamente se codifica como utf8.
Luego lo puse en .vimrc set termencoding=latin1
Como cosa curiosa antes de descubrir lo anterior, también me funcionó esta secuencia:
:set encoding=8bit-cp1252
:e! ++enc=8bit-cp1252
También funcionó:
:let &termencoding=&fileencoding (ponga el encoding del archivo actual al term)

FORMATEO DE TEXTO
Adicional información, en la ayuda en formated text

Las siguientes líneas las añadí a cpp.vim:
" fvel para que coincida con lo que tengo en C++ Builder
" Cambiar los tabs por 3 espacios (tabstop=3)
set ts=3
" Cambiar el indent > y unindent < también a 3
set shiftwidth=3
Para hacerlo 4 veces, pues: 4> o 4<
<} unindent el párrafo actual
>{ indenta el párrafo anterior
Para que no haga wordwrap:
set nowrap

Para que de Enter automáticamente a cierto ancho:
set textwidth=30

En la ayuda afirma que otra manera de convertir los tab en spaces es:
:set expandtab
:%retab para aplicar el cambio de retab en todo el fichero


MACROS
:source {file} lee comandos ex de {file}
Estando en modo de ordenes, pulsar q1 (1 es el nombre o número de la macro), seguidamente realizar las acciones que deseamos que se repitan y para terminar pulsar q otra vez.
Para ejecutarla es [count]@1
:imap <F3> hola
Hace que en modo insert al pulsar F3 se escriba hola, sirve para reemplazar por ejemplo la invocación
de las macros que es con @1 etc.
Ctrl-N autocompleta palabras basándose en las del mismo archivo

En el VIM USER MANUAL el capítulo usr_26.txt, Repeating, explican todo para automatizar tareas repetitivas, inclusive en batch mode, sin abrir los archivos, por ejemplo: para cambiar la palabra person por Jones en varios archivos, sin cargarlos directamente en vim (aunque cargándolos también se puede).
Grabar estas líneas con comandos en un archivo change.vim

%s/person/Jones/g
quit

Correr el editor en batch mode, usando este shell script;

for file in *.txt; do
vim -e -s $file < change.vim
write tempfile
done

La variable $file es colocada a un nombre diferente cada vez.
-e corre vim en ex mode
-s es silent (batch)

SCRIPTS
Se puede escribir uno en el propio vim y ejecutarlo con :@"
Los scripts pueden ser leídos e interpretados mediante el comando :source.
:script me muestra todos los scripts instalados

Ejemplo:

:let i=1
:while i<5
: echo "count is" i
:let i=i+1
:endwhile
Se puede probar con :@" (en la version 6.4 de ubunto 6.06 no funciona pero se puede con :source % donde % indica el archivo actual, ver read only registers)

This looks into lines 1 to 20 (inclusive) and echoes any date found in there.

:for line in getline(1, 20)
: if line =~ "Date: "
: echo matchstr(line, 'Date: \zs.*')
: endif
:endfor

--------------------------------------------------------
Modo de linea de comandos: es cuando se tecla : seguido de una órden
Modo ex:
gQ lleva al modo ex, donde se pueden dar órdenes del tipo : pero sin tener que estar dando : tiro por t, donde se pueden dar órdenes del tipo : pero sin tener que estar dando : tiro por tiro (ver :h Q y :h gQ se sale de este modo escriviendo :vi (de visual)

Tomado de: http://en.wikibooks.org/wiki/Learning_the_vi_editor/Vim/Modes
Ex-mode

The Ex mode is similar to the command line mode as it also allows you to enter Ex commands. Unlike the command-line mode you won't return to normal mode automatically. You can enter an Ex command by typing a Q in normal mode and leave it again with the :visual command. Note that the Ex mode is designed for Batch processing and as such won't support mappings or command-line editing.

For batch processing the Ex-mode is normally started from outside by calling the editor with the "-E" option. Here are real live example form a RPM Package Manager specification:

vim -E -s Makefile <<-EOF
:%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
:%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
:%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
:update
:quit
EOF

The RPM uses Bash as script language which make the example a little difficult to understand as two different script languages are mixed in one file.

vim -E -s
starts vim in "Ex-Improved" mode which allows for more advanced commands then the vi compatible Ex-mode (which is started with vim -e -s).
<<-EOF
tells bash to copy all lines that follow into the standard input of the external program just started.
:
are lines with Ex commands which vim will execute. The : is optional but helpful when two script languages are mixed in one file
:update
A beginners mistake is to forget to actually save the file after the change - falsely assuming that this happens automatically.
:quit
Last not least: don't forget to actually exit vim again.
EOF
marks the end of the standard input redirection - from now on bash will execute the command itself again.

If your shell does not allow such nifty redirection of standart input then you can always use a more classic approach to I/O redirection using two files:

vim -E -s Makefile <Makefile-Fix1.vim

And if have no standard input redirection available then you can try the -c option in combination with the source command:

vim -E -s -c "source Makefile-Fix1.vim" Makefile

With the Exim-mode many task classically performed by awk or sed can be done with vim and often better so:

* awk and sed are stream oriented - they only read the file forward from be beginning to the end while vim is buffer oriented - you can move forward and backward in the file as you like.
* vim's regular expressions are more powerful than awk's and sed's expressions - for example vim can match over several lines and supports zero matches.