你直接说你到底想干什么?
没事多看看优秀的脚本来看看人家有什么好的脚本技巧
vim 这个如何匹配
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: vim 这个如何匹配
写上 "\<F4>" 会通过自动转译得到 0x 80 6b 34 这样的键码,我要把这类键码逆转换,转回去得到 '\<F4>' 字符串。
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: vim 这个如何匹配
写的时候, 用单引号引用, 不要用双引号
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: vim 这个如何匹配
我同时又需要转译后的键码。
我试过写的时候用单引号,直接得到字符串,姑且叫做键名吧。然后自己写了一个函数,用双引号包装键名,再用 eval() 取值得到键码。
最后得到的键码也是没问题的,看似一切正常,但今天又发现个新问题,就是可用多种形式键名得到同种键码,也就是键名和键码是多对一关系。
<C-c> 和 <c-C> 这样的键是一样的, <C-S-F1> 和 <s-C-f1> 的键码也没区别。
我不能处理这种多对一关系,于是想对键名处理,将多化成一,发现和键码到键名的转化复杂度相当,用 substitute() 一是 7.2 不能替换那个 0x80 ,而且要多次调用,所要我才说要用自动机。
我试过写的时候用单引号,直接得到字符串,姑且叫做键名吧。然后自己写了一个函数,用双引号包装键名,再用 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 这个如何匹配
你取个键码有什么用啊
自己参考下 XPTemplate 怎么出来键位的
自己参考下 XPTemplate 怎么出来键位的
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: vim 这个如何匹配
相通了,再做一本键码对键名的字典 

- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: vim 这个如何匹配
终于知道该怎么做了 
