Vim select 在目标大小可变的块模式下部分多行
Vim select partially multiple lines in block mode where the targets are variable in size
假设您有这个 kotlin 代码:
package sample
data class Sample(
val title: String,
val subTitle: String,
val threeBlocksTitle: String
)
您正在使用 vim 进行编辑,并且您想要使用 Intellij 制作像这样的 V-BLOCK selection:
我所做的一切尝试都会导致以下两种情况之一:
select太多了:
select太少了:
我正在为此苦苦挣扎,我不知道该怎么做 :S
已编辑
我的最终目的是复制 val 名称并使用它作为命名 args 创建一个实例,如下所示:
我建议按步骤分解任务。首先,对齐您需要的线条。它可以通过许多 ways. I use Tabular 插件来实现。 Select 与 V
行并执行:
'<,'>Tabularize/:
现在你有这个:
val title : String,
val subTitle : String,
val threeBlocksTitle : String
val title2 : String,
第二步是块 select 和 <C-V>
。
进一步的步骤取决于您的目标。您可能想删除末尾的空格。将文本放在某处并使用简单的正则表达式,如:
'[,']s; ;;g
另一种使用宏的方法。
清除寄存器a
(例如)并将其设置为初始值:
:let @a="\n"
导航到第一个变量并记录宏以注册 q
:
qq"Ayiwjq
它将提取单词(变量),将其附加到寄存器 a
并向下移动一行。之后,您可以对要添加到结果的每个变量使用 @q
。 iw
部分可以更改为 t:
如果可能出现非单词字符。
首先,对于视觉select离子:
如果您希望vim显示与 IntelliJ 显示的完全一样的可视块,您无法做到。
然而,如果你只想抽取变量名,当然可以通过vim完成。
在我的示例代码中,我使用了寄存器 x
,因此请在尝试解决方案之前清除它。
清除x
寄存器:
qxq
你可以做的是,select 包含目标变量名称的 3 行,然后执行:
:'<,'>s/\w\+\ze:/\=setreg('X', submatch(0), 'V')/gn
然后到你要粘贴的地方:
"xp
请注意,当您按下 :
时,vim 会自动添加范围,因此您不必输入
事实上,如果我是你,我会复制这 3 行(整行或没有 val
),然后粘贴到某处,编辑起来很容易实现你的目标:
假设您有这个 kotlin 代码:
package sample
data class Sample(
val title: String,
val subTitle: String,
val threeBlocksTitle: String
)
您正在使用 vim 进行编辑,并且您想要使用 Intellij 制作像这样的 V-BLOCK selection:
我所做的一切尝试都会导致以下两种情况之一:
select太多了:
select太少了:
我正在为此苦苦挣扎,我不知道该怎么做 :S
已编辑
我的最终目的是复制 val 名称并使用它作为命名 args 创建一个实例,如下所示:
我建议按步骤分解任务。首先,对齐您需要的线条。它可以通过许多 ways. I use Tabular 插件来实现。 Select 与 V
行并执行:
'<,'>Tabularize/:
现在你有这个:
val title : String,
val subTitle : String,
val threeBlocksTitle : String
val title2 : String,
第二步是块 select 和 <C-V>
。
进一步的步骤取决于您的目标。您可能想删除末尾的空格。将文本放在某处并使用简单的正则表达式,如:
'[,']s; ;;g
另一种使用宏的方法。
清除寄存器a
(例如)并将其设置为初始值:
:let @a="\n"
导航到第一个变量并记录宏以注册 q
:
qq"Ayiwjq
它将提取单词(变量),将其附加到寄存器 a
并向下移动一行。之后,您可以对要添加到结果的每个变量使用 @q
。 iw
部分可以更改为 t:
如果可能出现非单词字符。
首先,对于视觉select离子:
如果您希望vim显示与 IntelliJ 显示的完全一样的可视块,您无法做到。
然而,如果你只想抽取变量名,当然可以通过vim完成。
在我的示例代码中,我使用了寄存器 x
,因此请在尝试解决方案之前清除它。
清除x
寄存器:
qxq
你可以做的是,select 包含目标变量名称的 3 行,然后执行:
:'<,'>s/\w\+\ze:/\=setreg('X', submatch(0), 'V')/gn
然后到你要粘贴的地方:
"xp
请注意,当您按下 :
时,vim 会自动添加范围,因此您不必输入
事实上,如果我是你,我会复制这 3 行(整行或没有 val
),然后粘贴到某处,编辑起来很容易实现你的目标: