首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Vim中复制行和附加几个字母

在Vim中复制行和附加几个字母
EN

Stack Overflow用户
提问于 2013-03-21 20:01:33
回答 3查看 436关注 0票数 2

我正在编辑一个文本文件中的字典,其中包含俄语单词--每行一个单词。

有些名词缺少它们的派生词,它们通常是由几个字母附加的同一个词--在6-7个变体中,如下面的截图所示:

在Vim中,我希望将光标放在第一列中,并逐行向下滚动。当我认出一个名词时,我想按一些(尽可能少!)敲击键取这个单词,把它复制成单独的行,并附加字母。

我可以通过稍后发布%sort u来处理副本。

如果我能在整个文件上运行这个命令,它将是这样的:

代码语言:javascript
运行
复制
%s/\(.\+\)$/\1^M\1а^M\1ам^M\1ами^M\1ах^M\1е^M\1ном^M/

请问您有什么想法,如何在Vim中创建这样一个“宏”?

EN

回答 3

Stack Overflow用户

发布于 2013-03-21 20:11:10

您可以通过在q模式下按escape记录宏。例如,

  1. 将光标放在要编辑的名词上。
  2. qa开始记录宏并将其存储在寄存器a中(其他字母表和数字也可用于寄存器)。
  3. 做您想做的任何一般操作(复制行、粘贴、附加字母等,就像您试图在搜索字符串中显示的那样)。
  4. 一旦您完成了更改,在escape模式下再次按q

您的宏现在在寄存器a中创建。每当您想重复您的密钥序列时,只需按@a键即可。

请注意,您可以在recording模式下执行任何操作,包括任何类型的命令、插入、光标移动等等。有关宏和相关选项的更多信息,请查看Vim帮助:h complex-repeat

Vim寄存器作为宏和跳转测试的位置持有者共享;此功能允许您在文件中保存和编辑宏。详情请参见this question

票数 4
EN

Stack Overflow用户

发布于 2013-03-21 20:36:20

下面是一个映射解决方案,它将行复制到缓冲区中,然后使用p粘贴。

代码语言:javascript
运行
复制
  map <F2> 0dwpo<esc>pAa<enter><esc>pAam<enter><esc>pAax ...etc
票数 1
EN

Stack Overflow用户

发布于 2013-03-21 20:54:37

如果你的目标是,当你的光标在一个特殊的单词上,并按下什么,vim将附加不同的“后缀”(我希望我使用正确的词,但你知道我的意思)。你可以去宏(q)。但是,由于您已经编写了:s命令,您可以使用该命令创建一个映射,并且它会更短。

在命令行中,您可以通过按<c-r><c-w>获得光标下的单词。所以你可以试着:

代码语言:javascript
运行
复制
nnoremap <leader>z :s/<c-r><c-w>/& & &..../<cr>

我没有编写& & &...部分,因为我不知道(从未尝试过,我没有在windows下使用vim )。我甚至没有窗口),如果行中断\n可以在这里使用的窗口下。&是指整个匹配的部分,在本例中是光标下的单词。

因此,您只需将光标移动到单词,输入<leader>z,vim就可以为您完成这项工作。(如果替换部分是正确的:)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15556932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档