2013-07-09 108 views
2

替换奇怪的字符。当我记录并粘贴在vim宏,我结束了这一点:如何防止或粘贴Vim的宏

<80>kl - these 3 characters (the <80> is just 1 character) represent <Left> 
^[ - represents <Esc> 
^M - represents <cr> 

这是不行的,因为当我粘贴,然后尝试编辑宏,这些字符不是清晰的。

我只想让vim使用这些更清晰的缩写粘贴宏而不是那种神秘的废话。或者,我可以在粘贴的线上执行替换的功能可以正常工作。

+2

据我所知,不可能。你所看到的是寄存器中实际字节的表示。 ''等纯粹是一种便利的符号,可以用一些Vim命令来解释,例如':map'。 – glts

+0

当然有可能。它不必是直接替换粘贴 - 可以只是一个粘贴行上的函数。 – user66378

+0

为什么你要清理它?这只是一个舒适问题吗? – romainl

回答

1

您可以使用这样一个简单的函数来替换^M^[等的每个匹配项(在当前行)并替换它们。您可以添加额外的条目到replacements字典,因为你发现你需要它们。

function! ReplaceWeirdCharacters() 
    let replacements = { 
    \ "\<C-[>": '<Esc>', 
    \ "\<C-M>": '<CR>', 
    \ "\u80kb": '<BS>' 
    \} 
    for [a, b] in items(replacements) 
    execute "s/" . a . "/" . b . "/ge" 
    endfor 
endfunction 
nnoremap <leader>rwc :call ReplaceWeirdCharacters()<CR> 
+0

这很好。但是,我怎样才能代表backspace中的<80> kb和用于删除的<80> kD?有一个使用它们的列表:help't_ku' - 为我和其他人的未来参考。 – user66378

+0

你可以从字面上将'<80>'字符放到脚本中。 (你可以用'^ M'和'^''做这个,或者你可以使用'“\ u80”'。 (请参阅':h expr-quote') – pandubear

+0

我不明白。我尝试过''\ u80kb“',''<\u80kb>”',它是一个直接粘贴来自宏,''\ ukb“','<\ukb>”等的“”<80> kb“它没有捕获代表退格的''<80> kb''字符串。你能提供这些角色的直接/经过测试的例子吗? – user66378