我正在尝试向sql_string := sql_string || case when sql_string is not null then ')' end;
添加命令并使用它。
我已经记录了一个宏(在寄存器.vimrc
中),该宏显示以下内容(以换行符结尾):
h
我可以通过输入one
two
three
在寄存器h
中看到这一点。看起来像:
:reg
我已经在"h ione^Mtwo^Mthree^M^[
和.vimrc
下的test
中粘贴了此版本以及替代版本:
test2
我的理解是map <Leader>test ione^Mtwo^Mthree^M^[
map <Leader>test2 ione<C-R>two<C-R>three<C-R><ESC>
使用了无法显示的字符,例如test
和^M
,所以我用阅读的内容创建了^[
是等效的test2
。
重启vim之后(我认为这意味着在写入.vimrc
之后启动另一个vim会话),我将对它们进行测试。
在正常模式下(多次按下 ESC 后),我尝试以下两种操作两者:
.vimrc
:test
在两种情况下,我都分别给出了错误:
:test2
E492: Not an editor command: test
无济于事,我检查是否已经映射了我映射的内容。
在普通模式下,我输入E492: Not an editor command: test2
并确实看到了我添加的内容,但是它们带有反斜杠:
:map
最后,在正常模式下,我再次尝试,这次使用反斜杠。我尝试以下两种方法两者:
\test2 ione<C-R>two<C-R>three<C-R><Esc>
\test ione^Mtwo^Mthree^M^[
:\test
这一次,我收到两个命令的以下错误:
:\test2
我在Mac上,尝试使用Terminal(OSX随附)和iTerm2。
有人可以借给我一些指导吗?
答案 0 :(得分:3)
如果您先按领导键,然后再按键test
或test2
,则将执行您的映射。您没有创建命令(:
)。
如果您希望将它们用作命令,则不需要映射,而需要在.vimrc
中进行类似操作:
function! Test()
execute "normal ione"
execute "normal otwo"
execute "normal othree"
execute "normal o"
endfunc
command -nargs=0 Test call Test()
然后您可以用作:Test
。
但是,如果要进行映射而不是命令,则可能需要:
nnoremap
代替map
(仅在正常模式下使用,并且不递归执行映射),test2
是您所需要的(我在这里更改为<leader>t
)<C-R>
是Control R
,您需要<CR>
作为返回键。这是一个例子:
nnoremap <Leader>t ione<CR>two<CR>three<CR><ESC>