loading...

Postila de vim

nenitf profile image Neni Updated on ・3 min read

Vim

🚧 Post em desenvolvimento 🚧

- [x] Motivos
- [ ] Instalação
- [ ] Modos
- [ ] Movimentação
  - [x] Dentro do arquivo
  - [x] Scroll
  - [x] Para inserção
  - [ ] Entre arquivos
- [x] Objetos
- [ ] Pesquisa/Substituição
- [ ] Vimrc
  - [ ] .vimrc
  - [ ] ftplugin
    - [x] PHP
    - [x] Go
    - [ ] Markdown
- [ ] Plugins
Enter fullscreen mode Exit fullscreen mode

Motivos

  • Leve
  • Open source
  • Popular e bem estabelecido na comunidade (foi criado em 1991)
  • Utilizável pelo terminal
  • Cheio de atalhos/comando para navegação
  • Multi plataforma
  • Configurável através de dotfiles
  • Expansível com plugins
  • Mouseless
  • O suficiente para programar (sintaxe, sugestões de texto, pesquisa, substituição e etc)

Precisa saber configurar debug e intellisense (go to definition, complete e etc)

Movimentação

Dentro do arquivo

:h motion.txt

  • h esquerda
  • j baixo
  • k cima
  • l direita
  • gg primeira linha
  • G ultima linha
  • 0 primeira coluna da linha
  • ^ primeira coluna com texto da linha
  • $ ultima coluna da linha (incluindo quebra)
  • g_ ultima coluna da linha com texto da linha
  • fx carácter x à frente na linha (, volta e ; avança)
  • Fx carácter x atrás na linha (, volta e ; avança)
  • tx carácter anterior x à frente na linha (, volta e ; avança)
  • Tx carácter anterior x atrás na linha (, volta e ; avança)
  • * palavra (N volta e n avança)
  • w avança para o início de uma word
  • W avança para o início de uma WORD
  • e avança para o final de uma word
  • E avança para o final de uma WORD
  • b volta para o início de uma word
  • B volta para o final de uma WORD
  • :25 linha 25
  • % início ou final do fechamento de {[(<

"word" é uma palavra delimitada por non-keyword (pontuação, espaço e números) e "WORD" por espaço somente

Scroll

  • zt
  • zb
  • zz

Para inserção

  • i esquerda do cursor
  • a direita do cursor
  • I início da linha (alias de ^i)
  • A fim da linha (alias de g_a)
  • o nova linha abaixo da atual
  • O nova linha acima da atual
  • gi volta para a posição do ultimo insertmode

Objetos

É possível instruir uma seleção para executar um comando, como deletar substituir ou até selecionar (:h objects). Essa instrução é a delimitação do que o comando deve abranger, cujo pode ser de um verbo com movimentação ou verbo com objeto:

  • dd apaga uma linha
  v
  perfer et obdura!
  dolor hic tibi proderit olim;
Enter fullscreen mode Exit fullscreen mode
  dolor hic tibi proderit olim;
  ^
Enter fullscreen mode Exit fullscreen mode
  • de apaga do cursor até o final de uma palavra. É um verbo com movimentação (d + e)
  --v
  perfer et obdura!
  dolor hic tibi proderit olim;
Enter fullscreen mode Exit fullscreen mode
  --v
  pe et obdura!
  dolor hic tibi proderit olim;
Enter fullscreen mode Exit fullscreen mode
  • diw apaga a palavra sob o cursor. É um verbo com objeto (d inside word)
  --v
  perfer et obdura!
  dolor hic tibi proderit olim;
Enter fullscreen mode Exit fullscreen mode
  v
   et obdura!
  dolor hic tibi proderit olim;
Enter fullscreen mode Exit fullscreen mode

A delimitação de objetos é feita atraves de uma instrução + substantivo, sendo:

instrução letra
entre (inner) i
ao redor (outer) a
até (find) f
até antes (until) t
substantivo letra
aspas "
apóstrofo '
parênteses ( ou )
chaves { ou }
colchetes [ ou ]
maior/menor < ou >
palavra w
parágrafo p
sentença s
<tag></tag> t

Pesquisa e substituição

descrição escopo comando
pesquisa arquivo /texto procurado
substituição arquivo :%s/original/substituto/g
pesquisa projeto :vimgrep /texto procurado/ **/*.php e :cw

Vimrc

  • Windows: %userprofile%\_vimrc
  • Linux: ~/.vimrc

Abaixo algumas sugestões de configuração.

AVISO: Várias das configurações abaixo podem ser substituídas por plugins, mas dispenso seu uso sempre que possível.

Ftplugin

Especificações para filetypes, ou seja, configurações que só são carregadas caso o arquivo aberto seja de um tipo específico (go, python, php e etc).
Elas podem ser criadas através de <runtimepath>/ftplugin/<nome-filetype>.vim. Caso um dos meus runtimepaths seja ~/dotfiles o caminho para o filetype php, ficaria ~/dotfiles/ftplugin/php.vim

PHP

" :make|cw
" THANKS: https://stackoverflow.com/a/7272248/9881278
" THANKS: https://stackoverflow.com/a/7193830/9881278
" THANKS: https://vim.fandom.com/wiki/Runtime_syntax_check_for_php
setl errorformat=Parse\ error:\ %m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G%.%#
setl makeprg=php\ -ln\ %

setlocal suffixesadd=.php
Enter fullscreen mode Exit fullscreen mode

Go

" :make|cw
setl errorformat=%-G#%.%#
setl errorformat+=%-G%.%#panic:\ %m
setl errorformat+=%-GFAIL%.%#
setl errorformat+=%-Gexit%.%#
setl errorformat+=%-GPASS%.%#
setl errorformat+=%-Gok%.%#
setl errorformat+=can\'t\ load\ package:\ %m
setl errorformat+=%f:%l:%c:\ %m
setl errorformat+=%f:%l:\ %m
setl errorformat+=%*\\s%f:%l\ %m
setl errorformat+=%+A---\ FAIL:\ Example%.%#
setl errorformat+=%C%m

setl makeprg=go\ test

command! -nargs=1 GoDoc !go doc <args>
" interpreta package.Fun como um nome de arquivo
nnoremap K :GoDoc <c-r><c-f><cr>
Enter fullscreen mode Exit fullscreen mode

Posted on by:

Discussion

pic
Editor guide