用例:

在JS文件中,我有一个类似的表达式:

 if (someVar === 'someValue') {
    statements;
}
 


,出于调试目的,有时我希望在上面的行中添加一个console.log

 console.log('someVar:', someVar);
if (someVar === 'someValue') {
    statements;
}
 


(正在工作)尝试:

我想要一些按键绑定来实现此目的,所以我尝试了:

nnoremap <Leader>L "ayiwOconsole.log(':', );<Esc>2F'"apf "ap


,基本上是将光标下方的单词移到寄存器a上,然后在上面的行中写一个空的console.log(':', );模板,移动到所需位置并将寄存器a粘贴两次。很脏。您能想到更优雅的方法吗?

#1 楼

您可以在插入模式下使用<C-R>插入寄存器的内容。这样,您可以一次插入整行,包括重复的变量名。

例如:

nnoremap <Leader>L "ayiwOconsole.log('<C-R>a:', <C-R>a);<Esc>


您可能想要考虑同时考虑添加可视模式映射,在这种情况下,您还可以使用它来记录表达式的值,而不仅仅是记录一个与单词匹配的变量:

xnoremap <Leader>L "ayOconsole.log('<C-R>a:', <C-R>a);<Esc>


有关:help i_CTRL-R在插入模式下如何工作的更多详细信息,请参见<C-R>

评论


谢谢,filbranden!看起来绝对比我的好!

–Jordi Nebot
19年11月13日在19:46

#2 楼


你们能想到一种更优雅的方法吗?


好吧,至少我们可以尽力而为:-)

nnoremap <silent><Leader>L :put! =printf('console.log(''%s:'',  %s);', expand('<cword>'), expand('<cword>'))<CR>


评论


谢谢你,马特!我试试看:)

–Jordi Nebot
19年11月13日在19:45