有几种方法可以处理这个问题。您可以创建宏,也可以创建地图。两者都可以在运行 VIM 时完成。两者都可以放在另一个文件中(.vimrc
例如,您的 . 文件或具有特定于该项目的绑定的文件)并在需要时获取。
我也会给你一些关于正则表达式的建议:如果你正在写一些特别复杂的东西,你可以通过以(ie, )\
开头的正则表达式来大大减少所需的 s数量。\v
:s/\v([0-9a-f]+\s)/0x\1/g
在 VIM 中创建宏
您可以在 VIM 中启动宏,方法是q在普通模式下按,然后按您希望用于宏的键。然后,您可以通过按@后跟宏的字母来调用宏。q在正常模式下再次按下可停止录制。
因此,您可以按如下方式输入此宏(使用q
寄存器):
qq:s/\(.\+\)$/\1\r\1а\r\1ам\r\1ами\r\1ах\r\1е\r\1ном\r/
Enterq
然后,当您在线并且要运行此命令时,请@q从正常模式进入。
将宏存储在文件中并获取它
当您在最后一步创建宏时,您实际上在做的是设置q
寄存器。您可以通过输入registers
命令模式来检查这一点。您可以改为在.vimrc
文件中设置此宏,如下所示,每次启动 VIM 时都可以使用它。
- 创建要在 (
:new
) 中存储此宏的文件。
将以下行添加到文件中:
let @q=":s/\\(.\\+\\)$/\\1\\r\\1a\\r\\1b\\r\\1ам\\r\\1ами\\r\\1ах\\r\\1е\\r\\1ном\\r/^M"
(如果您用 拉出该行并将其粘贴到 VIM 中Ctrl+R",则行尾将有一个正确的^M
字符。您需要进行一些手动编辑以确保它在引号内。或者,您可以Ctrl+VCtrl+M输入输入 ^M 字符。)
- 保存文件 (
:w testmacro.vim
)。
- 来源它(
:so %
或:source %
)。
- @q通过在您想要执行此操作的行之一上键入来测试您的宏。
稍后,您将能够通过运行:so testmacro.vim
.
创建映射
您可以改为创建映射。以下映射复制给定行中的最后一个单词,将其粘贴到以下六行,然后附加到每个给定行。
nnoremap <c-j> yy6pAа<esc>jAам<esc>jAами<esc>jAах<esc>jAе<esc>jAном<esc>j
n
“nnoremap”开头的表示它仅在正常模式下起作用。
noremap
意味着此命令不会进行任何递归重新映射(而使用nmap
,这可能会发生)。
<c-j>
映射到Ctrl+J
yy6p
yanks 行并粘贴 6 次。
Aa<esc>j
追加到当前行的末尾,输入文本(在本例中为a
),退出插入模式,然后向下移动一行。
您可以在 vim 的命令模式下输入此命令,也可以将其存储在文件中并使用:source
命令加载。
将寄存器与映射相结合
您可以访问映射中的寄存器。这意味着如果您知道输入给定的替换正则表达式会执行您想要的操作,您可以将其保存在寄存器中,然后在当前行输入您的命令。
为此,请在文件中输入以下命令,然后获取它:
nnoremap <c-i> :<c-r>f<cr>
let @f="s/\\(.\\+\\)$/\\1\\r\\1a\\r\\1b\\r\\1ам\\r\\1ами\\r\\1ах\\r\\1е\\r\\1ном\\r/^M"
现在您可以输入Ctrl+I以在当前行的寄存器 f 中运行替换正则表达式。
或者,将一些寄存器专用于该目的 - 比如说 af。
nnoremap <c-l> yy6p$"apj"bpj"cpj"dpj"epj"fpj
let @a="a"
let @b="ам"
let @c="ами"
let @d="ax"
let @e="e"
let @f="ном
在这种情况下,我们"在点击使用它的命令(例如粘贴)之前使用了按下和寄存器名称的功能。