我试图将包含退格符的vim宏保存到我的vimrc文件中。这个宏的想法是在js文件中添加文档段。如果我有以下功能:
function foo() {
}
我将光标放在功能线上,运行宏并创建:
function foo() {
/*
| <- Cursor ends up here in insert mode.
*/
}
当我创建宏时,我得到了以下寄存器:
o/*^M<80>kb<80>kb<80>kb*/<80>ku^M<80>kb<80>kb<80>kb
(&lt; 80&gt;是单个字符)
我尝试将其添加为let命令:
let a='o/*^M<80>kb<80>kb<80>kb*/<80>ku^M<80>kb<80>kb<80>kb'
但是当我运行它时只打印出来:
function foo() {
/*^M<80>kb<80>kb<80>kb*/<ESC>O<80>kb<80>kb<80>kb
}
是否有一些我失踪的逃脱?也许有不同的更好的方法来做到这一点?
答案 0 :(得分:3)
所有<80>kb
并不重要:它们由Vim内部使用,但您根本不需要它们。
请记住,宏只不过是一系列的击键。如果您知道自己做了什么,那么“概念化”您的操作/击键并直接将其记录下来而不用录制步骤甚至没有Vim本身并不困难。这就是#vim所有常客所做的事情:Vim是一种语言,你只需要考虑实现目标所需的步骤,你就拥有了宏:
o/*^M*/^[O
o open a new line below the current line
/* insert /*
^M insert a line break
*/ insert */
^[ go back to normal mode
O open a new line above the current line
要在函数中使用该宏,请使用:normal
命令,该命令允许您从命令行或从vimscript上下文执行正常模式命令:
:norm! o/*^M*/^[O
直接在映射中使用该宏:
nnoremap <key> o/*^M*/^[O
要在~/.vimrc
中保存该宏:
let @a = "o/*^M*/^[O"
并按@a
。
重要提醒:
^M is obtained with <C-v><CR>
^[ is obtained with <C-v><Esc>
参考:
:help recording
:help registers
:help :normal
:help i_ctrl-v
答案 1 :(得分:2)
那些<80>kb
是退格的内部密钥代码。将每个替换为\<BS>
(并将^M
写为\<CR>
),并将整个宏字符串放在双引号中,您应该好好去。< / p>
另外,要指定注册a,您需要使用@a
。