无法成功使用来自vimrc(mac)的自定义映射的vim命令

时间:2019-05-10 12:23:29

标签: vim

我正在尝试向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。

有人可以借给我一些指导吗?

1 个答案:

答案 0 :(得分:3)

如果您先按领导键,然后再按键testtest2,则将执行您的映射。您没有创建命令(:)。

如果您希望将它们用作命令,则不需要映射,而需要在.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>