¿Es posible definir un objeto de texto en vim que actuará en una región rectangular?
Por ejemplo, supongamos que tengo columnas de texto alineadas verticalmente, como esta:
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
¿Sería posible definir un objeto c
de texto para columnas, de modo que dac
elimine una columna, la yac
tire, la cac
cambie, etc.?
(Sé acerca de Control-V para seleccionar una región rectangular, y sé que luego puede usar d
, y
etc. para eliminar, tirar, etc., la región seleccionada. Pero tengo curiosidad específica sobre lo que es posible usando objetos de texto).
cursor-motions
custom-text-object
Leah Velleman
fuente
fuente
Respuestas:
Si, esto es posible. @PeterRincker sugiere el plugin textobj-palabra-columna , que define cuatro objetos de texto (
ic
,ac
,iC
, yaC
) para las columnas basados en palabras.La idea detrás de esta funcionalidad es crear una función que defina un movimiento basado en columnas y luego asignar esta función de manera apropiada a las asignaciones de modo visual / select y las asignaciones pendientes del operador. Para utilizar el complemento mencionado anteriormente como ejemplo, crea las siguientes asignaciones:
Aquí
TextObjWordBasedColumn(...)
define el movimiento de la columna y se asigna tanto al modo visual / selectivo como al modoxnoremap
pendiente del operador cononoremap
. Tenga en cuenta que la función es un poco compleja para manejar la indendación y encontrar los límites de movimiento apropiados.fuente
¿Es posible? ¡Absolutamente! Caso y punto: textobj-word-column.vim .
Cómo hacer tus propios objetos de texto
Normalmente, el modo visual se usa para crear un nuevo objeto de texto. El modo visual puede ser de línea, de carácter (típicamente) o de bloque visual. Aquí están los conceptos básicos de lo que necesitará:
a{char}
oi{char}
donde{char}
es tanto descriptiva como no utilizada. por ejemplo,i/
como un objeto de texto de ejemplo entre/
's.T/
t/
v
xnoremap
.onoremap
y:normal
.Ahora para un ejemplo de nuestro simple
i/
que crea un objeto de texto entre/
's:Siempre que siga los ingredientes básicos, puede crear objetos de texto para todo tipo de cosas.
Creación avanzada de objetos de texto con vim-textobj-user
El complemento vim-textobj-user proporciona una forma común de definir objetos de texto personalizados de una manera más declarativa. Por ejemplo, aquí hay un objeto de texto de etiqueta php:
Para obtener más ayuda con vim-textobj usuario consulte la ayuda doc:
:h textobj-user-introduction
.Para más ayuda
Además de la página wiki Crear nuevos objetos de texto de Vim.
fuente