Vim: Programando e Extendendo Funcionalidades

In my view, besides great features already present in vim, another fantastic thing is the possibility of programming new functions to solve unusual tasks.

Na minha opinião além das infindáveis funcionalidades já presentes no vim, outra coisa fantástica é a possibilidade de se programar novas funções para tarefas inusitadas.

Uma das melhrores formas de aprender novos recursos do vim é seguindo as threads do stackoverfow. Um exemplo seria esta pergunta postada hoje 27 de janeiro de 2018 sobre o vim

One of the best ways to learn new features is folowing stackoverflow theads. One example would be the this question posted today jan 27 on vim.

Copy block of code with increasing index

I have the following function declaration:
Eu tenho a seguinte declaração de função:

function f1(s)
real f1,s
f1 = 1/s
end
 
I would like to copy the same block but with increasing function name, i.e. f1, f2, f3, ... in order to get this:

Eu gostaria de copiar o mesmo bloco mas com incremento no nome da função, ex f1, f2, f3, ... a fim de obter isso:

function f1(s)
real f1,s
f1 = 1/s
end

function f2(s)
real f2,s
f2 = 1/s
end

function f3(s)
real f3,s
f3 = 1/s
end   
Lá vou eu criar uma função pra resolver o problema e me divertir com a solução

Here I go creating a function to solve the problem

fun! CopyAndIncrease()
try
let l:old_copy = getreg('0')
normal yip
let @0 = substitute(@0,'\d\+','\=submatch(0) + 1','g')
exec "normal }O\<Esc>p"
finally
call setreg('0', l:old_copy)
endtry
endfun
command! -nargs=0 CopyIncrease silent call CopyAndIncrease() | exec "normal \<Esc>"
let mapleader = ','
nnoremap <Leader>c :CopyIncrease<CR>

Explicando a função:
getreg -> usado para pegar o valor de um registro
setreg -> usado para setar um registro
let @0 = substitute(@0,'\d\+','\=submatch(0) + 1','g') -> usado para incrementar os números do clipboard
normal yip ...... copia o bloco em modo normal
exec "normal }O\<Esc>p" -> cola o trecho incrementado abaixo do paragrafo atual
A fim de testar essa função sem ter que colocar no seu ~/.vimrc basta copiar e executar: :@+ Agora você pode digitar ,c para copiar o bloco com o incremento

I am even using vim to change subtitles (using Tim's Pope Speeddating)

Estou usando o vim até pra alterar tempo de legendas, vejam só, instalo o plugin speeddating do Tim Pope, através do gerenciador de plugins Plug.

Pra quem não sabe o comando Ctrl-x decrementa números em modo
normal e o comando Ctrl-a incrementa, acontece que ele não reconhece
numeros complexos com segundos por exempo, o plugin speeddating resolve isso
veja como consertei minha legenda usando o vim com esse plugin
Minha legenda estava 187 segundos atrasada
O som começava aos 51 segundos e a primeira legenda estava:
00:03:07,687 --> 00:03:10,178
então eu fiz um cálculo usando o comando bc
echo "187-51" | bc
136
o comando final ficou
:g/\v^\d{2}:\d{2}:/execute "normal t,136\<C-x>2t,136\<C-x>"

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo