例如,假设我具有垂直对齐的文本列,例如:
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
是否可以为列,例如
c
会删除列,dac
会删除列,yac
会更改列,依此类推?以此类推?然后使用cac
,d
等删除,拉动所选区域。但是我特别想知道使用文本对象的可能性。)#1 楼
是的,这是可能的。 @PeterRincker建议使用插件textobj-word-column,该插件为基于单词的列定义了四个文本对象(ic
,ac
,iC
和aC
)。该功能背后的想法是创建一个函数定义基于列的运动,然后将该功能适当地映射到可视/选择模式映射和操作员待定映射。以上面提到的插件为例,它创建以下映射:和
TextObjWordBasedColumn(...)
的操作员待定模式。请注意,该函数稍微复杂一些,以处理各种倾向并找到合适的运动边界。#2 楼
可能吗?绝对!案例和要点:textobj-word-column.vim。如何制作自己的文本对象
通常情况下,可视模式用于创建新的文本对象。可视模式可以是逐行,逐字符(通常)或可视块。以下是您所需的基础知识:
未使用的组合键,通常是
a{char}
或i{char}
,其中{char}
既是描述性的又是未使用的。例如i/
作为/
之间的文本对象示例。需要一种方法来找到文本对象的开始。例如
T/
需要找到文本对象结尾的方法。例如
t/
选择视觉模式。例如
v
通过
xnoremap
创建可视模式(仅)映射。创建操作员待定模式映射,通过
onoremap
和:normal
使用可视模式映射。现在以我们简单的
i/
为例,它在/
之间创建了一个文本对象:各种各样的事情。使用vim-textobj-user创建高级文本对象
vim-textobj-user插件提供了一种通用的方法来定义自定义文本对象。一种更具说明性的方式。例如,这是一个php标签文本对象:
xnoremap i/ :<c-u>normal! T/vt/<cr>
onoremap i/ :normal vi/<cr>
有关vim-textobj-user的更多帮助,请参见其帮助文档:
:h textobj-user-introduction
。以获取更多帮助
call textobj#user#plugin('php', {
\ 'code': {
\ 'pattern': ['<?php\>', '?>'],
\ 'select-a': 'aP',
\ 'select-i': 'iP',
\ },
\ })
以及“创建新的文本对象Vim Wiki”页面。
评论
可能吗?绝对!大小写:textobj-word-column.vim@PeterRincker很好,但是我想知道是否可以利用Kana的textobj-user简化它。
谢谢,彼得,那正是我要找的例子。
@PeterRincker将此作为答案:)