Vim宏与退格

时间:2014-12-20 09:16:50

标签: javascript vim macros

我试图将包含退格符的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 
}

是否有一些我失踪的逃脱?也许有不同的更好的方法来做到这一点?

2 个答案:

答案 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