É possível definir um objeto de texto no vim que atuará em uma região retangular?
Por exemplo, suponha que eu tenha colunas de texto alinhadas verticalmente, assim:
column 1 co column 2 col
lumn 1 colu umn 2 column
mn 1 column 2 column 2 c
1 column 1 olumn 2 colu
Seria possível definir um objeto c
de texto para colunas, de modo a dac
excluir uma coluna, yac
arrancá-la, cac
alterá-la e assim por diante?
(Conheço o Control-V para selecionar uma região retangular e sei que você pode usar d
, y
etc para excluir, puxar etc a região selecionada. Mas estou especificamente curioso sobre o que é possível usar objetos de texto.)
cursor-motions
custom-text-object
Leah Velleman
fonte
fonte
Respostas:
Sim, isso é possível. @PeterRincker sugere o plug-in textobj-palavra-coluna , que define quatro objectos de texto (
ic
,ac
,iC
, eaC
) para as colunas com base em palavras.A idéia por trás dessa funcionalidade é criar uma função que defina um movimento baseado em coluna e, em seguida, mapear essa função adequadamente para mapeamentos de modo visual / de seleção e mapeamentos pendentes do operador. Para usar o plug-in mencionado acima como exemplo, ele cria os seguintes mapeamentos:
Aqui
TextObjWordBasedColumn(...)
define o movimento da coluna e é mapeado para o modo visual / de seleção comxnoremap
e para o modo pendente do operador comonoremap
. Observe que a função é um pouco complexa para lidar com indendações e encontrar os limites de movimento apropriados.fonte
É possível? Absolutamente! Caso e argumento: textobj-word-column.vim .
Como criar seus próprios objetos de texto
Normalmente, o modo visual é usado para criar um novo objeto de texto. O modo visual pode ser em linha, em caracteres (normalmente) ou em bloco visual. Aqui está o básico do que você precisará:
a{char}
oui{char}
onde{char}
é descritiva e não utilizada. por exemplo,i/
como um exemplo de objeto de texto entre/
's.T/
t/
v
xnoremap
.onoremap
e:normal
.Agora, um exemplo do nosso simple
i/
que cria um objeto de texto entre/
's:Contanto que você siga os ingredientes básicos, poderá criar objetos de texto para todo o tipo de coisas.
Criação avançada de objeto de texto com vim-textobj-user
O plug- in vim-textobj-user fornece uma maneira comum de definir objetos de texto customizados de maneira mais declarativa. Por exemplo, aqui está um objeto de texto com tag php:
Para obter mais ajuda com o vim-textobj pelo usuário ver seu doc ajuda:
:h textobj-user-introduction
.Para mais ajuda
Bem como a página wiki Criando novos objetos de texto Vim.
fonte