Julio Biason
6 years ago
13 changed files with 614 additions and 9 deletions
@ -0,0 +1,56 @@
|
||||
+++ |
||||
title = "Plugins - Commentary" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte em que automatizamos a técnica de sumir código sem sumir com o |
||||
código. |
||||
|
||||
<!-- more --> |
||||
|
||||
O quarto plugin da lista de plugins é |
||||
[Commentary](https://github.com/tpope/vim-commentary). |
||||
|
||||
Como de costume, para instalar, você pode baixar o conteúdo do repositório |
||||
acima para dentro do seu ~/.vim/ (o diretório, não o arquivo de inicialização) |
||||
ou usar o Vundle: |
||||
|
||||
```viml |
||||
Plugin "tpope/vim-commentary" |
||||
``` |
||||
|
||||
Commentary não é um plugin visual, o que significa que, mais uma vez, depois de |
||||
instalado você não verá nada de novo. |
||||
|
||||
O que o Commentary faz é adicionar um atalho para comentar linhas de código, |
||||
baseado no tipo de arquivo atual. O atalho é \\\\{movimentação} ou \\\\\\ para |
||||
comentar a linha atual (ou você pode entrar em modo visual para selecionar as |
||||
linhas e fazer \\\\ e a parte selecionada vai ficar comentada); para descomentar, |
||||
basta fazer a mesma coisa (ou seja, se o pedaço selecionado não estiver |
||||
comentado, ele será comentado; se já estiver comentado, o comentário será |
||||
removido.) |
||||
|
||||
E era isso. |
||||
|
||||
A única ressalva aqui fica por conta de um comportamento padrão do VIM: O VIM |
||||
tem apenas um tipo de arquivo (definido com `:set filetype={sintaxe}`) que vale |
||||
para todo o arquivo. Assim, se você estiver usando a sintaxe de HTML, |
||||
Commentary provavelmente não irá comentar seu código JavaScript corretamente. A |
||||
coisa fica pior se você estiver editando um arquivo com sintaxe de template, já |
||||
que o tipo de arquivo é o template, não HTML ou JavaScript ou CSS. |
||||
|
||||
Ainda, aproveitando o gancho, existem sintaxes e sintaxes. Algumas sintaxes são |
||||
antigas e estão definidas de uma forma que o VIM perde o contexto do código |
||||
apresentado e apresenta com a coloração errada (andar no texto em direção ao |
||||
começo do arquivo, com [PageUp], normalmente resolve esse problema, pois o VIM |
||||
encontra um ponto onde a sintaxe volta a fazer sentido). Por exemplo, a sintaxe |
||||
"htmldjango", que funciona também para arquivos Jinja2 tem a leve tendência de |
||||
se perder em arquivos muito longos; usando uma sintaxe externa para Jinja2 |
||||
(usando `:Plugin "Glench/Vim-Jinja2-Syntax"`) esse problema não acontece. |
||||
|
||||
Então lembre-se: Se a sintaxe "pirar", voltar um pouco para o começo do arquivo |
||||
deve resolver (e, depois disso, o VIM carrega o contexto a medida que você for |
||||
voltando para o ponto original) e sempre verifique se não há um arquivo de |
||||
sintaxe que corresponda melhor às suas necessidades. |
||||
|
||||
{{ chapters(prev_chapter_link="./14-03-fugitive", prev_chapter_title="Plugins - Fugitive", next_chapter_link="./14-05-tabular", next_chapter_title="Plugins - Tabular") }} |
@ -0,0 +1,100 @@
|
||||
+++ |
||||
title = "Plugins - Tabular" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte em que deixamos as coisas alinhadas. |
||||
|
||||
<!-- more --> |
||||
|
||||
O quinto plugin da lista de plugins é |
||||
[Tabular](https://github.com/godlygeek/tabular), um plugin para alinhar |
||||
elementos baseados em expressões regulares (calma, não é tão complicado quando |
||||
parece.) |
||||
|
||||
Mais uma vez, para instalar pelo Vundle: |
||||
|
||||
```viml |
||||
Plugin "godlygeek/tabular" |
||||
``` |
||||
|
||||
Assim como Fugitive e Commentary, Tabular não é um plugin visual, mas adiciona |
||||
um novo comando `:{range}Tabularize {expressão regular}`. |
||||
|
||||
(Apenas lembrando de {range}: são dois indicadores separados por vírgula, |
||||
números são linhas, "$" é a última linha do arquivo, "%" é igual à "1,$" (todo o |
||||
arquivo), "'{marcador1},'{marcador2}" vai do marcador1 até o marcador2 e, se você |
||||
selecionar uma região no modo visual, ao pressionar `:`, o prompt deve ficar "'< |
||||
,'>" que são os marcadores especiais de início e fim, respectivamente, da área |
||||
visual. Todos os exemplos que eu vou mostrar daqui pra frente vão usar o |
||||
{range} de início e fim do bloco visual, porque faz mais sentido.) |
||||
|
||||
A forma mais simples de usar o Tabular é passar um único caractere, que indica |
||||
qual o ponto onde os elementos serão alinhados. Por exemplo, com o seguinte |
||||
trecho de código: |
||||
|
||||
```javascript |
||||
var pos = 1; |
||||
var element = $(this); |
||||
var i = 0; |
||||
``` |
||||
|
||||
Se você selecionar o mesmo visualmente e fizer `:'< ,'>Tabularize /=`, o resultado será: |
||||
|
||||
```javascript |
||||
var pos = 1; |
||||
var element = $(this); |
||||
var i = 0; |
||||
``` |
||||
|
||||
Ao contrário da pesquisa (e da substituição), Tabularize aceita um segundo |
||||
parâmetro que indica como os elementos devem ser alinhados e qual o espaçamento |
||||
que deve existir entre os elementos. Este parâmetro pode ser até 3 pares, no |
||||
formato {alinhamento}{espaços depois do elemento} que, apesar da minha péssima |
||||
descrição, não é tão complicado assim. |
||||
|
||||
Por exemplo, imagine que eu tenho o seguinte pedaço de código em HTML: |
||||
|
||||
```html |
||||
<input class='block-size disabled' |
||||
id='input-box' |
||||
name='login' |
||||
value='' |
||||
placeholder='Enter your login'> |
||||
``` |
||||
|
||||
No caso, eu estou quebrando cada um dos elementos para diminuir o tamanho da |
||||
linha, já que ainda não coloquei minhas opções de templating e cada uma destas |
||||
linhas deve ficar bem maior. Mas, como exemplo, serve. |
||||
|
||||
O que eu quero é que os "=" fiquem alinhados (mais ou menos o que o Xcode faz |
||||
com código Objective-C). Assim, eu posso fazer `:'< ,'>Tabularize /=/r0c0l0` para |
||||
obter: |
||||
|
||||
```html |
||||
<input class='block-size disabled' |
||||
id='input-box' |
||||
name='login' |
||||
value='' |
||||
placeholder='Enter your login'> |
||||
``` |
||||
|
||||
A explicação está no parámetro: o primeiro par, "r0" siginfica que o elemento |
||||
antes do alinhamento deve ser alinhado à direita ("r") com 0 espaços depois do |
||||
elemento; "c0" significa que o elemento de alinhamento (no nosso caso, "=") |
||||
deve ser centralizado ("c") também com 0 espaços depois; e finalmente "l0" |
||||
significa que o elemento depois do alinhamento deve ficar à esquerda ("l") e |
||||
nenhum espaço deve ser adicionado. |
||||
|
||||
Se eu quisesse que o espaço não ficasse grudado tanto na esquerda quando na |
||||
direita, eu teria que fazer `:'< ,'>Tabularize /=/r1c1l0` para obter: |
||||
|
||||
```html |
||||
<input class = 'block-size disabled' |
||||
id = 'input-box' |
||||
name = 'login' |
||||
value = '' |
||||
placeholder = 'Enter your login'> |
||||
``` |
||||
|
||||
{{ chapters(prev_chapter_link="./14-04-commentary", prev_chapter_title="Plugins - Commentary", next_chapter_link="./14-06-autopairs", next_chapter_title="Plugins - Auto-pairs") }} |
@ -0,0 +1,72 @@
|
||||
+++ |
||||
title = "Plugins - Auto-Pairs" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte em que o VIM fecha as coisas pra você. |
||||
|
||||
<!-- more --> |
||||
|
||||
O sexto plugin da lista de plugins que eu vou falar é |
||||
[Auto-Pairs](https://github.com/jiangmiao/auto-pairs). Como de costume, para |
||||
instalar o plugin pelo Vundle: |
||||
|
||||
```viml |
||||
Plugin "jiangmiao/auto-pairs" |
||||
``` |
||||
|
||||
Uma vez instalado o plugin, você verá que cada `'`, `"`, `(`, `[` e `{` irá, |
||||
automagicamente, gerar o seu respectivo `'`, `"`, `)`, `]` e `}`. Simples assim. |
||||
|
||||
Entretanto, Auto-Pairs não funciona bem com o modo visual (se você já usou |
||||
TextMate ou Sublime Text, deve ter percebido que se você usar uma das |
||||
combinações acima com uma área selecionada, o editor vai "circular" a área |
||||
selecionada com o par indicado). O que existe é `[Alt]e` em modo de inserção que |
||||
faz a troca rápida entre o caractere de fechamento de pair com a próxima |
||||
palavra. |
||||
|
||||
Por exemplo, se você tiver |
||||
|
||||
``` |
||||
''auto |
||||
``` |
||||
|
||||
... com o cursor posicionado entre as duas aspas e usar `[Alt]e`, você irá ficar com |
||||
|
||||
``` |
||||
'auto' |
||||
``` |
||||
|
||||
Ainda, o Auto-pairs tem um controle para "pular" sobre os caracteres de |
||||
fechamento já existentes. Se ele adicionar um ")" (que deve ficar antes do |
||||
cursor), quando você pressionar ")" no seu teclado, ao invés de adicionar mais |
||||
um ")", o cursor irá pular o ")" existente. |
||||
|
||||
Embora isso pareça bom, em certos casos pode ser um problema. Por exemplo, caso |
||||
você tenha o seguinte trecho de código: |
||||
|
||||
```javascript |
||||
$(function () { |
||||
$('#button').on('click', function () { |
||||
|
||||
}) |
||||
``` |
||||
|
||||
Se você tentar fechar a função interna, o Auto-Pairs irá, na verdade, saltar |
||||
para o fechamento da função externa, efetivamente "proibindo" que você feche as |
||||
funções corretamente. Soluções são: |
||||
|
||||
* Fechar a função externa de novo, forçando o que era para encerrar a função |
||||
externa em encerramento da função interna (depois você pode alinhar as duas |
||||
novamente usando o modo visual e `=` em modo normal); |
||||
|
||||
* Copiar e colar o fechamento da função externa; |
||||
|
||||
* Desligar o "salto" de elementos de fechamento com `:let g:AutoPairsFlyMode = 0` |
||||
(e, se você realmente preferir que o salto nunca seja feito, pode adicionar |
||||
esta linha no seu vimrc); |
||||
|
||||
* Desligar temporariamente o Auto-Pairs com `[Alt]p` em modo de inserção (usar |
||||
`[Alt]p` novamente irá reativar o Auto-Pairs). |
||||
|
||||
{{ chapters(prev_chapter_link="./14-05-tabular", prev_chapter_title="Plugins - Tabular", next_chapter_link="./14-07-syntastic", next_chapter_title="Plugins - Syntastic") }} |
@ -0,0 +1,60 @@
|
||||
+++ |
||||
title = "Plugins - Syntastic" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte que o VIM ajuda você a achar o que tem de errado no seu |
||||
código. |
||||
|
||||
<!-- more --> |
||||
|
||||
O sétimo plugin discutido é o [Syntastic](https://github.com/scrooloose/syntastic). |
||||
Para instalar com Vundle: |
||||
|
||||
```viml |
||||
Plugin "scrooloose/syntastic" |
||||
``` |
||||
|
||||
Inicialmente, Syntastic não faz nada. O que ele faz é, depois de salvar o |
||||
arquivo em disco, chama a função de lint para o tipo de arquivo atual e mostra |
||||
os problemas encontrados no canto esquerdo do código; ao passar pela linha com |
||||
problema, o erro encontrado é reportado na linha de comando. |
||||
|
||||
![](syntastic.png) |
||||
|
||||
Para ver quais são todos os erros encontrados pelo aplicativo de lint, use |
||||
`:Errors`, que irá abrir uma janela de quickfix com a lista de erros encontrados. |
||||
Ações de janelas e de quickfix, que já vinhamos vendo, continuam valendo. É só |
||||
o comando para abrir o quickfix que é diferente neste caso. |
||||
|
||||
Você pode selecionar quais lints serão usados adicionado com `let |
||||
g:syntastic_{linguagem}_checkers=['']` (por exemplo, para verificar arquivos Python apenas |
||||
com PyLint, você deve usar `let g:syntastic_python_checkers=['pylint']` mas nunca |
||||
tive problemas com os lints atuais). |
||||
|
||||
Uma coisa que deve ser cuidada é que o lint deve estar disponível no momento |
||||
que o VIM abriu o arquivo, senão ele não será usado. Por exemplo, se você tiver |
||||
pylint disponível apenas dentro de um virtualenv, chamar o VIM antes de estar |
||||
no virtualenv fará com que Syntastic não encontre o pylint e, com isso, nenhum |
||||
erro será reportado. |
||||
|
||||
Ainda, assim como aconteceu com Commentary, Syntastic usa o tipo de arquivo |
||||
atual, não o do bloco. Por exemplo, ao editar um arquivo de template de Django, |
||||
que tem partes na linguagem de template do Django, HTML, CSS e JavaScript, |
||||
mesmo que você tenha os lints para HTML, CSS e JavaScript instalados, estes não |
||||
serão executados -- porque o VIM considera o arquivo um tipo inteiro, não um |
||||
conjunto de pequenos blocos de tipos diferentes. |
||||
|
||||
E, por último, Airline tem suporte para mostrar os erros encontrados pelo |
||||
Syntastic na barra de status. Se você adicionar |
||||
|
||||
```viml |
||||
let g:airline_enable_syntastic = 1 |
||||
``` |
||||
|
||||
... no seu vimrc, o canto direito da barra de status irá mostrar a primeira |
||||
linha com erro e a quantidade de erros encontrados. |
||||
|
||||
![](syntastic-airline.png) |
||||
|
||||
{{ chapters(prev_chapter_link="./14-06-autopairs", prev_chapter_title="Plugins - Auto-Pairs", next_chapter_link="./14-08-snipmate", next_chapter_title="Plugins - SnipMate") }} |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 5.4 KiB |
@ -0,0 +1,107 @@
|
||||
+++ |
||||
title = "Plugins - Snipmate" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte que automatizamos a digitação de coisas repetidas. |
||||
|
||||
<!-- more --> |
||||
|
||||
Para o oitavo plugin, iremos falar sobre [SnipMate](https://github.com/msanders/snipmate.vim). |
||||
|
||||
Como de costume, instalando pelo Vundle: |
||||
|
||||
```viml |
||||
Plugin "msanders/snipmate.vim" |
||||
``` |
||||
|
||||
SnipMate adiciona a funcionalidade de snippets dentro do VIM. Para quem não |
||||
sabe, snippets são trechos de código que são adicionados automaticamente (ou |
||||
com a ação de alguma combinação de teclas) a partir de uma simples palavra. |
||||
|
||||
Por exemplo, um dos snippets que já estão inclusos no pacote do SnipMate, você |
||||
pode, num arquivo JavaScript, simplesmente digitar: |
||||
|
||||
```javascript |
||||
fun |
||||
``` |
||||
|
||||
... e, ao pressionar [Tab], o SnipMate irá adicionar, automaticamente |
||||
|
||||
```javascript |
||||
function function_name (argument) { |
||||
// body... |
||||
} |
||||
``` |
||||
|
||||
... posicionando o cursor diretamente sobre "function_name" para que você coloque |
||||
o nome da função; pressionando [Tab] irá posicionar o cursor sobre "argument" e |
||||
pressionando [Tab] de novo, o cursor ficará sobre "// body..." (depois disso, |
||||
[Tab] irá funcionar como tabulação, como normalmente é). |
||||
|
||||
Para criar seus próprios snippets, você tem duas opções e ambas devem ficar no |
||||
diretório $HOME/.vim/snippets: |
||||
|
||||
A primeira forma é através de um único arquivo, com o nome do tipo de arquivo |
||||
em que os snippets serão válidos (que você pode ver usando `:set ft`) com a |
||||
extensão snippets (por exemplo, para snippets para arquivos Python, você teria |
||||
um arquivo "$HOME/.vim/snippets/python.snippets"). Neste arquivo você deve |
||||
iniciar os snippets com a palavra snippet, seguida da palavra que será |
||||
utilizada para identificar o snippet, seguido pelo snippet em si, com uma |
||||
tabulação na frente (quando não houver tabulação, SnipMate considera que o |
||||
snippet terminou). Os pontos onde você quer que o cursor pare devem ser |
||||
identificados por "$\{\{número}:{texto\}\}" e, se ficou confuso, é porque eu estou |
||||
usando "coisas que você substituir" com {} e o próprio SnipMate usa {} para |
||||
blocos, mas deve ficar mais claro com este exemplo: |
||||
|
||||
```viml |
||||
snippet for |
||||
{% for ${1:record} in ${2:list} %} |
||||
${3:content} |
||||
{% endfor %} |
||||
``` |
||||
|
||||
Este snippet, para Django e Jinja, faz um loop "for". Ao digitar "for" e |
||||
pressionar [Tab], o conteúdo será adicionado, o cursor será posicionando onde |
||||
`${1:record}` está permitindo a alteração do mesmo, pressionando [Tab] de novo |
||||
irá posicionar em `${2:list}` e assim por diante. |
||||
|
||||
E, caso você esteja se perguntando "E o que acontece se eu colocar o mesmo |
||||
número em dois lugares diferentes?", a resposta é: lugares com o mesmo número |
||||
são alterados ao mesmo tempo. Por exemplo, o snippet: |
||||
|
||||
```viml |
||||
snippet block |
||||
{% block ${1:blockname} %} |
||||
${2:{% content %}} |
||||
{% endblock $1 %} |
||||
``` |
||||
|
||||
... tem o número "1" duas vezes (uma depois de "block" e outra depois de |
||||
"endblock"). Quando você colocar o nome do bloco no primeiro (do lado de |
||||
"block"), o outro (depois de "endblock") será preenchido automaticamente. |
||||
|
||||
A segunda forma de adicionar snippets é através de arquivos individuais. Ao |
||||
invés de ter um arquivo com o tipo de arquivo com todos os snippets dentro, |
||||
você irá criar um diretório com o tipo de arquivo e cada arquivo dentro deste |
||||
diretório deve ser "{palavra}.snippet". Assim, como no exemplo anterior tínhamos |
||||
um arquivo "$HOME/.vim/snippets/htmldjango.snippets", poderíamos ter, na verdade, |
||||
um diretório "$HOME/.vim/snippets/htmldjango/" e, dentro deste diretório, um |
||||
arquivo chamando "block.snippet" com o conteúdo do snippet, sem as tabulações (já |
||||
que agora o SnipMate sabe exatamente onde termina o snippet: no final do |
||||
arquivo). |
||||
|
||||
E quando usar um ou outro? Você deve usar arquivos individuais se o SnipMate já |
||||
tiver um arquivo de snippets para o tipo de arquivo especificado. Assim, se |
||||
você quiser adicionar novos snippets para Python, que já tem uma série de |
||||
snippets prontos incluídos no pacote do próprio SnipMate, você deve usar a |
||||
segunda forma. Caso contrário, fica por preferência pessoal. |
||||
|
||||
E, para concluir: Ao escrever este post, descobri que existe um fork da versão |
||||
apresentada aqui. A versão do "msanders" não é atualizada a 4 anos -- mas |
||||
funciona perfeitamente e tenho usado sem problemas a bastante tempo. Se você |
||||
quiser algo mais recente (por algum motivo), o fork está em |
||||
github.com/garbas/vim-snipmate (e requer mais dependências que a versão |
||||
original). |
||||
|
||||
{{ chapters(prev_chapter_link="./14-07-syntastic", prev_chapter_title="Plugins - Syntastic", next_chapter_link="./14-09-ctrlp", next_chapter_title="Plugins - CtrlP e CtrlPFunky") }} |
After Width: | Height: | Size: 40 KiB |
@ -0,0 +1,105 @@
|
||||
+++ |
||||
title = "Plugins - CtrlP and CtrlPFunky" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte em que você vai ter a impressão de estar programando em Perl, |
||||
porque qualquer caractere é válido. |
||||
|
||||
<!-- more --> |
||||
|
||||
O nono e penúltimo plugin (na verdade os nonos e penúltimos plugins) discutido |
||||
é o [CtrlP](https://github.com/kien/ctrlp.vim) e seu plugin (sim, um plugin do |
||||
plugin[^1]) [CtrlPFunky](https://github.com/tacahiroy/ctrlp-funky) |
||||
|
||||
Para instalar os dois, com Vundle: |
||||
|
||||
```viml |
||||
Plugin "kien/ctrlp.vim" |
||||
Plugin "tacahiroy/ctrlp-funky" |
||||
``` |
||||
|
||||
CtrlP é um plugin que facilita encontrar e abrir arquivos, com procura fuzzy. |
||||
E, por procura fuzzy eu quero dizer que ele encontra qualquer arquivo que tenha |
||||
as letras digitadas na ordem que você digitou. |
||||
|
||||
![](ctrlp.png) |
||||
|
||||
Para acionar o CtrlP, você deve digitar, logicamente, `[Ctrl]p`. Ao fazer isso, |
||||
uma janela parecida com a Quickfix irá aparecer, mostrando alguns arquivos e um |
||||
prompt para que você digite o que quer encontrar. No exemplo acima, como que |
||||
digitei "vim", ele encontrou todos os arquivos a partir do diretório atual que |
||||
começavam com "v", tinham um "i" no meio e terminavam com "m" (seria |
||||
basicamente o mesmo que pegar a lista de arquivos a partir do diretório atual e |
||||
seus sub-diretórios e procurar pela regex "v.\*i.\*m".) |
||||
|
||||
Uma vez que você encontre o arquivo desejado na lista (ela não tem rolagem, |
||||
então se você ainda não estiver vendo o arquivo, continue adicionando |
||||
caracteres para que o arquivo desejado apareça na lista -- uma vez lá, você pode |
||||
selecioná-lo com as setas), você pode: |
||||
|
||||
* Pressionar `[Enter]` para abrir o arquivo na janela atual. |
||||
* Pressionar `[Ctrl]t` para abrir o arquivo em outra aba. |
||||
* Pressionar `[Ctrl]s` para fazer um split horizontal e abrir o arquivo no novo |
||||
split. |
||||
* Pressionar `[Ctrl]v` para fazer um split vertical e abrir o arquivo no novo |
||||
split. |
||||
|
||||
Um problema que você talvez encontre é que o CtrlP costuma listar tudo que se |
||||
encaixar na expressão utilizada, inclusive arquivos binário, objetos |
||||
intermediários, etc. Para remover estes arquivos da listagem, você pode usar |
||||
`:set wildignore`, que também afeta a lista de arquivos que o VIM mostra quando |
||||
você estiver usando os comandos normais de abertura de arquivo (`:e`, `:tabe`, |
||||
etc). |
||||
|
||||
Como a configuração do wildignore é uma lista, você pode adicionar ou remover |
||||
usando += e -=. Por exemplo, para ignorar os arquivos de objetos compilados do |
||||
Python e o diretório que o setup.py constuma usar para construir o pacote de |
||||
distribuição do módulo, você teria: |
||||
|
||||
```viml |
||||
set wildignore+=*.pyc |
||||
set wildignore+=*/build/* |
||||
``` |
||||
|
||||
ou ainda, para economizar uma linha: |
||||
|
||||
```viml |
||||
set wildignore+=*.pyc,*/build/* |
||||
``` |
||||
|
||||
CtrlP tem um plugin, chamado CtrlPFunky. O que ele faz é basicamente o mesmo |
||||
que o CtrlP, mas procurando funções, não arquivos. |
||||
|
||||
Para ativar o CtrlPFunky, você precisa primeiro adicionar o mesmo como uma |
||||
extensão do CtrlP (e, só pra avisar, isso é específico do CtrlP, não algo que |
||||
funciona com todo e qualquer plugin): |
||||
|
||||
```viml |
||||
let g:ctrlp_extensions = ['funky'] |
||||
``` |
||||
|
||||
Uma vez instalado, você pode usar `:CtrlPFunky` para mostrar a lista de funções |
||||
no fonte (e a procura continua igual). O problema com CtrlPFunky é que, assim |
||||
como todas as demais coisas que vínhamos vendo, ele se basea no tipo de arquivo |
||||
atual (`:set ft`) e para arquivos em que o conteúdo e uma mistura de várias |
||||
linguagens (p.ex., arquivo template com a linguagem de template, HTML, CSS e |
||||
JavaScript), a listagem de funções pode não ser o que você está esperando (ou |
||||
sequer vai funcionar). |
||||
|
||||
Para facilitar a sua vida, você pode fazer um mapeamento do comando para um |
||||
atalho de teclado. Por exemplo, eu coloquei `[Ctrl]o` para chamar o CtrlPFunky |
||||
com |
||||
|
||||
```viml |
||||
nnoremap <C-O> :CtrlPFunky<CR> |
||||
``` |
||||
|
||||
[^1] "Plugin-ception" har har har[^2]. |
||||
|
||||
[^2] Eu não consigo entender porque as pessoas utilizando tanto o "ception" |
||||
quando encontram um meta desta jeito. Um "inception" é a inserção de uma |
||||
idéia de forma que a pessoa pense que a idéia é dela, não uma |
||||
"[Matrioska](http://pt.wikipedia.org/wiki/Matrioska)". |
||||
|
||||
{{ chapters(prev_chapter_link="./14-08-snipmate", prev_chapter_title="Plugins - SnipMate", next_chapter_link="./14-10-multiple-cursors", next_chapter_title="Plugins - Vim-Multiple-Cursors") }} |
@ -0,0 +1,52 @@
|
||||
+++ |
||||
title = "Plugins - Vim-Multiple-Cursors" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte em que você pode repetir várias coisas, visualmente. |
||||
|
||||
<!-- more --> |
||||
|
||||
O último plugin da lista de plugins é o [Vim-Multiple-Cursors](https://github.com/terryma/vim-multiple-cursors). |
||||
|
||||
Já que sempre falamos em usar Vundle... |
||||
|
||||
```viml |
||||
Plugin "terryma/vim-multiple-cursors" |
||||
``` |
||||
|
||||
Assim como outros plugins já comentados, Vim-Multiple-Cursors não tem nenhuma |
||||
apresentação inicial. O que este plugin faz é permitir que você tenha várias |
||||
cursores no texto ao mesmo tempo, aplicando a mesma transformação em todos os |
||||
lugares. |
||||
|
||||
A forma mais simples de usar Vim-Multiple-Cursors é ir até a palavra que você |
||||
quer alterar e pressionar `[Ctrl]n`. Você vai notar que o VIM irá mostrar como se |
||||
você tivesse entrado em modo visual e selecionado apenas aquela palavra, o que |
||||
não é nada impressionante. No entanto, se você pressionar `[Ctrl]n` de novo, você |
||||
verá que o cursor irá para a próxima ocorrência da palavra. Na verdade, o que |
||||
você tem agora são dois cursores e tudo que você fizer em um será repetido no |
||||
outro. Por exemplo, se você fizer ce sobre a palavra, você verá as duas |
||||
palavras mudando ao mesmo tempo. |
||||
|
||||
De certa forma, o que você está fazendo é um "search and replace" só que está |
||||
vendo exatamente o que vai ser alterado. |
||||
|
||||
Teoricamente, você poderia fazer `I"[Esc]ea"` para adicionar aspas ao redor da |
||||
palavra, mas há um pequeno inconveniente: `[Esc]`, que você precisa usar para |
||||
retornar para o modo normal depois de entrar em modo de inserção com `I` irá |
||||
também terminar o modo de múltiplos cursores. |
||||
|
||||
A segunda forma de usar Vim-Multiple-Cursors é fazer uma seleção visual e usar |
||||
`[Ctrl]n`. Para cada linha da seleção, será adicionado um novo cursor. E, |
||||
novamente, o que você fizer em um deles será repetido em todos. |
||||
|
||||
Simples assim. |
||||
|
||||
A única coisa que eu posso deixar de aviso é que, por algum motivo, utilizando |
||||
uma seleção visual de várias linhas (`[Shift]v`), entrando em modo de múltiplos |
||||
cursores (`[Ctrl]n`) e usando aspas (com o Auto-Pairs), meu undo acabou sendo |
||||
perdido (`u` removia o texto inteiro, não a alteração feita com |
||||
Vim-Multiple-Cursors). |
||||
|
||||
{{ chapters(prev_chapter_link="./14-09-ctrlp", prev_chapter_title="Plugins - CtrlP e CtrlPFunky", next_chapter_link="./15-conclusao", next_chapter_title="Conclusão") }} |
@ -0,0 +1,53 @@
|
||||
+++ |
||||
title = "Plugins - Vim-Multiple-Cursors" |
||||
date = 2015-12-22 |
||||
+++ |
||||
|
||||
Essa é a parte em que nos despedimos. |
||||
|
||||
<!-- more --> |
||||
|
||||
Pessoalmente, a palavra que eu usaria para descrever o VIM é extensível. Não |
||||
apenas pela quantidade de plugins criados e aperfeiçoados nestes 20 anos de |
||||
editor (na verdade, 22 se você considerar a [primeira versão |
||||
disponibilizada](http://en.wikipedia.org/wiki/Vim_%28text_editor%29) em 1991 ou |
||||
25 se você considerar quando Bram Moolenaar fez a versão 1.0 para o Amiga), mas |
||||
pela forma como os comandos foram projetados: Você sabe que uma movimentação do |
||||
cursor com um número da frente “pula” outras ocorrências, então qualquer |
||||
comando que você descobre como movimentação repete esse comportamento; Você |
||||
sabe que comandos que requerem movimentação aceitam qualquer comando de |
||||
movimentação (incluindo a quantidade, discutido antes); e assim por diante. |
||||
Claro que isto permite várias formas diferentes de fazer a mesma coisa, mas |
||||
isto também garante que você vai achar uma forma que se encaixe com o seu |
||||
workflow de desenvolvimento. |
||||
|
||||
E não que, como eu falei lá no começo, VIM seja o editor perfeito para todas as |
||||
condições: Existem coisas novas surgindo a todo momento (por exemplo, a idéia |
||||
de múltiplos cursores só foi popularizado quando o TextMate foi lançado no OS |
||||
X) e que o editor base não consegue fazer -- mas como o editor é extensível em |
||||
várias formas, alguém já fez um plugin para repetir o comportamento no editor. |
||||
Existem arquivos de sintaxe que são terríveis, e mesmo assim fazem parte do |
||||
pacote original -- e existem formas de atualizar por versões melhores. Existem |
||||
plugins que baseiam-se unicamente no tipo de arquivo inteiro e não no bloco -- |
||||
mas não há nada que não garanta que, no futuro, alguém consiga fazer um plugin |
||||
que troque automaticamente de modo baseado no contexto atual. |
||||
|
||||
Na contrapartida, existem certas coisas que o VIM consegue fazer que outros |
||||
editores não fazem: Pular para o ponto onde o texto foi inserido da última vez |
||||
é o que sempre me faz voltar a usar o VIM e que eu sinto uma tremenda falta nos |
||||
outros editores -- que, diga-se de passagem, é fácil do editor controlar pela |
||||
existência dos modos. |
||||
|
||||
E, como dicas de despedida: Quando alguém comentar sobre uma feature em outro |
||||
editor, lembre-se de procurar por "vim {feature}" na internet; muito |
||||
provavelmente a feature já existe em alguma forma para o VIM ou já tem alguém |
||||
tentando escrever um plugin para fazer a mesma coisa. E lembre-se sempre que |
||||
`:wq` só funciona no VIM, não nos demais editores ou no seu emulador de |
||||
terminal[^1]. |
||||
|
||||
[^1] Você pode perguntar para qualquer usuário de longa data quantas vezes eles |
||||
tentaram fechar o terminal ou mesmo um editor de textos como Word ou |
||||
LibreOffice com `:wq` e a resposta provavelmente vai ser "mais vezes que eu |
||||
posso lembrar". |
||||
|
||||
{{ chapters(prev_chapter_link="./14-10-multiple-cursors", prev_chapter_title="Plugins - Vim-Multiple-Cursors") }} |
Loading…
Reference in new issue