Que diriez-vous de la fonction suivante? J'ai utilisé \% x08 au lieu de^H car il est plus facile de copier et coller le code résultant. Vous pouvez taper et utiliser Ctrl - VCtrl - H si vous préférez, mais je pensais que \% x08 pourrait être plus facile. Cela tente également de gérer les backspaces au début de la ligne (il suffit de les supprimer).
" Define a command to make it easier to use (default range is whole file)
command! -range=% ApplyBackspaces <line1>,<line2>call ApplyBackspaces()
" Function that does the work
function! ApplyBackspaces() range
" For each line in the selected lines
for index in range(a:firstline, a:lastline)
" Get the line as a string
let thisline = getline(index)
" Remove backspaces at the start of the line
let thisline = substitute(thisline, '^\%x08*', '', '')
" Repeatedly apply backspaces until there are none left
while thisline =~ '.\%x08'
" Substitute any character followed by backspace with nothing
let thisline = substitute(thisline, '.\%x08', '', 'g')
endwhile
" Remove any backspaces left at the start of the line
let thisline = substitute(thisline, '^\%x08*', '', '')
" Write the line back
call setline(index, thisline)
endfor
endfunction
Utilisation avec:
" Whole file:
:ApplyBackspaces
" Whole file (explicitly requested):
:%ApplyBackspaces
" Visual range:
:'<,'>ApplyBackspaces
Pour plus d'informations, voir:
:help command
:help command-range
:help function
:help function-range-example
:help substitute()
:help =~
:help \%x
Modifier
Notez que si vous voulez travailler sur une seule ligne, pourrait faire quelque chose comme ceci:
" Define the command to default to the current line rather than the whole file
command! -range ApplyBackspaces <line1>,<line2>call ApplyBackspaces()
" Create a mapping so that pressing ,b in normal mode deals with the current line
nmap ,b :ApplyBackspaces<CR>
ou vous pouvez simplement faire:
nmap ,b :.ApplyBackspaces<CR>
Par curiosité, quel est le but des caractères^H?Que sont-ils destinés à réaliser, soit sur une impression, soit sur la console? –
@ John Saunders: Sur les imprimantes à l'ancienne, ils ont causé une surimpression qui vous a permis de faire gras par répétition: x^Hx^Hx^Hx ou souligner: _^Ha_^Hb_^Hc. "moins" sur Linux utilisé pour les respecter et afficher le texte en gras ou souligné (peut-être qu'il le fait toujours!) –
Cela fonctionne toujours: $ echo 'h_^Hell^Hlo' | moins –