VIM:用相应的重音字母替换[aeiou]'

时间:2013-09-10 15:06:45

标签: vim digraphs

我知道VIM支持有向图,如果可以使用:s命令,那将是完美的,但我找不到使用它的方法!

我认为:

:%s/\([aeiouAEIOU]\)'/\=digraph(submatch(1)."!")/g

会很完美,但我找不到digraph功能。 提前谢谢。

修改
好的,在内置的VIM函数中进行了一些挖掘之后,我发现了tr并且是问题的第一个解决方案:

:%s/\([aeiouAEIOU]\)'/\=tr(submatch(1), 'aeiouAEIOU', 'àèìòùÀÈÌÒÙ')/g

但是,我仍然想知道是否有办法在表达式中使用digraph:)

2 个答案:

答案 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