No nos gusta la S.O.P.A.

Este programita es un ejercicio trivial para quien esté familiarizado con la programación de Vim, pero me llevó su tiempo escribirlo, aprendiendo sobre la marcha. Cuando lo escribí casi no estaba familiarizado con el lenguaje de programación incorporado en el editor Vim, y cuando había querido programar algo un poco complejo con él había terminado perdiéndome y dejándolo para mejor ocasión.

Lo escribí para poder editar programas en SuperBASIC sin preocuparme de los números de línea, y añadírselos al final, para que el emulador de QL pudiera cargar las fuentes.

No obstante, hay un truco para que el intérprete de SuperBASIC se «trague» un programa en este lenguaje sin números de línea. Consta de tres sencillos pasos:

  1. Introducir el comando auto con los parámetros de inicio e incremento que queramos.
  2. Borrar el número de línea que nos propone.
  3. Cargar el programa en cuestión, por ejemplo: load flp1_programa_bas.

El programa, una vez cargado, tendrá números de línea.

Por otra parte, en 2012-01 publiqué [[es.programa.sbim | SBim, una solución más completa para facilitar el desarrollo en S*BASIC]].

Uso y configuración

Para usar line_numbers.vim basta cargarlo en Vim: :source DIRECTORIO_CORRESPONDIENTE/line_numbers.vim.

Entonces los nuevos atajos de teclado estarán disponibles: ,r (una coma seguida de una R) para renumerar y ,u (coma seguida de U) para quitar los números de línea.

Las opciones de numeración pueden personalizarse con los parámetros del programa nl.

Listado


" line_numbers.vim

" Utility to (un)renumber the lines of a program (or any text).

" Copyright (C) 2011 Marcos Cruz (programandala.net)

" Change log:

" 2010-08-05 First version. 
" 2010-08-08 Unrenum() removed from Renum().
" 2010-08-11 RemoveSpaces() added, to remove the spaces nl creates at blank lines.
" 2010-08-12 Renum() saves the file.
" 2010-08-13 Renum() and Unrenum() go back to the current line.
" 2011-04-24 Renum() improved with a parameter: the first line number. Additional shortcut key created to call Renum(30000).
" 2011-05-14 Additional parameter in Renum(), the line step.

" To-do:

" Unrenum() prints undesired errors when the substitution fails.

function! RemoveSpaces()

	" Remove all spaces from lines that only contain spaces.

	exe ':%s/^\s\+$//'

endfunction

function! Unrenum()

	" Remove line numbers; and spaces from blank lines.
	" It changes the "r" register.

	exe ':ma r'
	exe ':%s/^ *[0-9]\+ //'
	call RemoveSpaces()
	exe ":normal 'r"

endfunction

function! Renum(first_line,step)

	" Put line numbers; remove spaces from blank lines; save the file.

	exe ':ma r'

	" Version with the awk program:
	" exe ":%!awk '{print NR,$0}'"
	" Reference:
	" http://vim.wikia.com/wiki/VimTip28

	" Example of an improved version with the awk program:
	" awk 'BEGIN {n=100};{sub(/xxx/,n-=3);print}'
	" Reference:
	" http://vim.wikia.com/wiki/Numbering_lines_and_interpolating_sequences

	" Version with the nl program (coreutils 6.9.92.4-f088d-dirty):
	exe ":%!nl --body-numbering=t --number-format=rn --number-width=5 --number-separator=' ' -v".a:first_line." -i".a:step
	" Most of the options are not needed, because their values are the default ones,
	" but I prefer to write them in order to make it easy to modify them.
	" In that version of coreutils, the long option for -v doesn't work (though the manual mentions it).
	" -v sets the first line number, and -i sets the line increment.
	" More modern versions of nl uses the clearer options --first-line and --line-increment, see:
	" http://www.gnu.org/software/coreutils/manual/coreutils.html#nl-invocation

	call RemoveSpaces()
	exe ':w'
	exe ":normal 'r"

endfunction

" Shortkey ',r' to renum, in normal mode:
nmap <silent> ,r :call Renum(100,10)<CR>
nmap <silent> ,R :call Renum(30000,10)<CR>
" Shortkey ',u' to unrenum, in normal mode:
nmap <silent> ,u :call Unrenum()<CR>


Descarga

Páginas relacionadas

Categorías de esta página

URL: http://programandala.net/es.programa.line_numbers_vim

Página escrita en 2010-08-05
Última modificación realizada en 2012-01-26