Recentemente, eu estava ciente da !
técnica de filtragem e adoro isso. Infelizmente, não consigo usá-lo no modo de bloqueio visual. Espero que alguns especialistas aqui me ajudem.
Basicamente, quero classificar no local uma coluna como a terceira abaixo (apenas um MWE). E não quero perturbar as outras colunas quando classifico.
Tentei filtrar ( !
) a terceira coluna selecionada visualmente (modo de bloco) através do sort
utilitário. Mas a classificação se estende além da seleção, ou seja, todas as linhas são trocadas, e não apenas a seleção, que também são classificadas com base na primeira coluna!
1. LARGEST 40
2. SECOND-LARGEST 168
3. MID 2.8
4. MID 540
5. MID 14.84
6. MID 40
7. SECOND-LEAST 64
8. LEAST 8
Selecionei a última coluna usando o bloco visual e disse o !sort --reverse
que aparece como
'<,'>!sort --reverse
E o resultado é estranho, em oposição ao que eu esperava. O resultado tem todas as linhas classificadas / trocadas, não apenas uma coluna, e também com base na primeira coluna, independentemente da minha seleção da terceira coluna!
8. LEAST 8
7. SECOND-LEAST 64
6. MID 40
5. MID 14.84
4. MID 540
3. MID 2.8
2. SECOND-LARGEST 168
1. LARGEST 40
A menos que seja impossível, gostaria de uma solução pura de classificação vim +, em vez de ferramentas relativamente avançadas, como sed
/ awk
. É mais importante conhecer a mim mesmo, quão limitado é o modo de bloqueio visual, comparado com o modo visual.
fonte
sort
comando interno do vim disponível, portanto, você não precisa chamar o externo!sort
para fazer uma classificação regular.:help filter
), mas também padronizado (desculpe, não sei como vincular profundamente esse POS). Você não pode reclamar se não fizer o RFTM.Respostas:
Eu acho que sua melhor esperança é o plugin vis.vim . Este plugin fornece um comando
B
que permite aplicar um comando a um bloco.Aqui, depois de instalar o plugin, você selecionaria seu bloco e usaria:
Observe que o comando pode ser qualquer coisa; portanto, em vez de
!sort
você poder fazer muitos outros processamentos no bloco, salve-o em outro arquivo (:'<,'>B w foo.txt
) ou aplique uma substituição (:'<,'>B s/foo/bar/g
)fonte
$
é usado no modo visual em blocos.