我知道VIM支持有向图,如果可以使用:s
命令,那将是完美的,但我找不到使用它的方法!
我认为:
:%s/\([aeiouAEIOU]\)'/\=digraph(submatch(1)."!")/g
会很完美,但我找不到digraph
功能。
提前谢谢。
修改
好的,在内置的VIM函数中进行了一些挖掘之后,我发现了tr
并且是问题的第一个解决方案:
:%s/\([aeiouAEIOU]\)'/\=tr(submatch(1), 'aeiouAEIOU', 'àèìòùÀÈÌÒÙ')/g
但是,我仍然想知道是否有办法在表达式中使用digraph
:)
答案 0 :(得分:5)
function! Digraph(letter, type)
silent exec "normal! :let l:s = '\<c-k>".a:letter.a:type."'\<cr>"
return l:s
endfunction
此功能可让您生成所需的任何有向图。
它通过使用普通命令运行它并将其分配给局部变量s来模拟键入<c-k><char><char>
。然后它返回s。
定义此功能后,您可以像这样使用它。
:%s/\([aeiouAEIOU]\)'/\=Digraph(submatch(1), "!")/g
注意:这是基于EasyDigraph
的源代码答案 1 :(得分:2)
这是使用手动编码的vim函数的另一种方法(添加到你的vimrc):
" get a matching digraph for a given ASCII character
function! GetDigraph(var1)
"incomplete dictionary of digraphs, add your own....
let DigDict = {'a': 'à', 'e': 'è', 'i': 'ì'}
"get the matching digraph. If no match, just return the given character
let DictEntry = get(DigDict, a:var1, a:var1)
return DictEntry
endfunction
将其称为:%s/\([aeiouAEIOU]\)'/\=GetDigraph(submatch(1))/g