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 endLá 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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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>" |