如何使用VISUAL BLOCK选择不同大小的单词?

bet*_*res 5 vim

我想从来没有人问过这个问题。

假设您只想选择文本中每行单词后面的变量import(设置、过滤器、用户、国家/地区、收藏夹):

import settings from './settings';
import filters from './filters';
import user from './user';
import countries from './countries';
import favorites from './favorites';
Run Code Online (Sandbox Code Playgroud)

我尝试将光标放在单词的开头settings,按C-V4jE但没有成功。我还尝试在进入模式后应用 REGEX VISUAL BLOCK,类似于/\w\s但产生相同的结果(固定列长度的文本块):

settings 
filters f
user from
countries
favorites
Run Code Online (Sandbox Code Playgroud)

我期望在 Vim 上得到的结果是这样的:

settings
filters
user
countries
favorites
Run Code Online (Sandbox Code Playgroud)

我想我在 VS Code 上看到了这个功能,但是经过多次搜索后,我在 Google 上找到了 0 个关于此解决方案的结果,每个人都只展示了如何选择固定列长度的文本,或者只是说使用$它仅适用于您想要选择的文本队伍的尽头。

有谁知道吗?谢谢!

rom*_*inl 1

它是视觉块模式:您选择的是整个块,而不是它的任意子集或超集。

\n

“直观地选择”任意长度的多个不连续的文本片段不是可以通过内置方法完成的,因此您可以尝试某种“多光标”插件或以不同的方式解决您的问题\xe2\x80\xa6

\n

例如,如果您想将这些单词括在大括号中,因为它们不再是默认导出,您可以执行以下操作:

\n
:'{,'}norm wciw{ <C-v><C-r>" }<CR>\n
Run Code Online (Sandbox Code Playgroud)\n

其中正常模式命令wciw{ <C-v><C-r>" }:

\n
    \n
  1. 使用 , 将光标移动到下一个单词w,
  2. \n
  3. 改变内部词ciw,
  4. \n
  5. 插入{ ,
  6. \n
  7. <C-r>"使用(<C-v>用于插入文字)插入未命名寄存器的内容^R,
  8. \n
  9. 插入},
  10. \n
\n

在 range 中的每一行执行'{,'},代表当前段落。

\n

或者,根据您的评论,如果您想删除这些单词以供以后使用,您可以执行以下操作:

\n
qaq\n:'{,'}norm w"Ayiwh"Ayiw\n
Run Code Online (Sandbox Code Playgroud)\n

使用正常模式命令a清除寄存器的情况:qaqw"Ayiwh"Ayiw

\n
    \n
  1. 使用 , 将光标移动到下一个单词w,
  2. \n
  3. 将其附加到a注册"Ayiw,
  4. \n
  5. h使用,将光标移动到前面的空格
  6. \n
  7. 将其附加到a注册"Ayiw,
  8. \n
\n

在 range 中的每一行执行'{,'},代表当前段落。

\n

随着时间的推移,这些事情就会自然而然地出现。

\n