vim 这个如何匹配

Vim、Emacs配置和使用
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: vim 这个如何匹配

#16

帖子 fanhe » 2011-08-27 18:25

你直接说你到底想干什么?
没事多看看优秀的脚本来看看人家有什么好的脚本技巧
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: vim 这个如何匹配

#17

帖子 自由建客 » 2011-08-27 19:32

写上 "\<F4>" 会通过自动转译得到 0x 80 6b 34 这样的键码,我要把这类键码逆转换,转回去得到 '\<F4>' 字符串。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: vim 这个如何匹配

#18

帖子 fanhe » 2011-08-27 19:59

写的时候, 用单引号引用, 不要用双引号
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: vim 这个如何匹配

#19

帖子 自由建客 » 2011-08-27 20:24

我同时又需要转译后的键码。
我试过写的时候用单引号,直接得到字符串,姑且叫做键名吧。然后自己写了一个函数,用双引号包装键名,再用 eval() 取值得到键码。

代码: 全选

let key_name = '\<F4>'
let key_code = eval(s:TrStr(key_name))

代码: 全选

" 用双引号包装字符串,串内双引号加反斜杠
fun s:TrStr(str)
    let r=substitute(a:str, '"', '\\"', 'g')
    return '"'.r.'"'
endfun
最后得到的键码也是没问题的,看似一切正常,但今天又发现个新问题,就是可用多种形式键名得到同种键码,也就是键名和键码是多对一关系。
<C-c> 和 <c-C> 这样的键是一样的, <C-S-F1> 和 <s-C-f1> 的键码也没区别。
我不能处理这种多对一关系,于是想对键名处理,将多化成一,发现和键码到键名的转化复杂度相当,用 substitute() 一是 7.2 不能替换那个 0x80 ,而且要多次调用,所要我才说要用自动机。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: vim 这个如何匹配

#20

帖子 fanhe » 2011-08-27 21:52

你取个键码有什么用啊

自己参考下 XPTemplate 怎么出来键位的
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: vim 这个如何匹配

#21

帖子 自由建客 » 2011-08-27 23:12

相通了,再做一本键码对键名的字典 :em09
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: vim 这个如何匹配

#22

帖子 自由建客 » 2011-08-27 23:23

终于知道该怎么做了 :em25
回复