分页: 1 / 1
vim 能否取得映射左边? [错误问题]
发表于 : 2011-05-23 16:57
由 自由建客
比如
getmapl("<c-a>")
getmapl("<C-a>")
getmapl("<C-A>")
结果都是 "<C-A>"
再比如
getmapl("<m-m>")
getmapl("<M-m>")
getmapl("<A-m>")
结果都是 "í" 或 "<A-m>"
--------------------------------
见五楼
Re: 能否取得映射左边?
发表于 : 2011-05-23 17:20
由 fanhe
你能不能描述清楚你的问题? 问问题都不会问?
有 getmapl 这个函数么?
需要获取map的左边,要么判断有没有映射, 要么就重定向 :map 的输出然后过滤文本
Re: 能否取得映射左边?
发表于 : 2011-05-23 19:15
由 自由建客
getmapl() 是我臆造的,我要的其实是一个转换函数,就是把 <c-a> <C-a> <C-A> 这样的同义词转换成唯一的表示方式。
Re: 能否取得映射左边?
发表于 : 2011-05-23 19:20
由 fanhe
自由建客 写了:getmapl() 是我臆造的,我要的其实是一个转换函数,就是把 <c-a> <C-a> <C-A> 这样的同义词转换成唯一的表示方式。
那跟你标题有什么关系?
你这样忽略大小写, 直接 =~? '<c-a>' 然后 upper 不就行了
Re: vim 能否取得映射左边?
发表于 : 2011-05-24 22:59
由 自由建客
fanhe, 没那么简单。
问题解决了,虽然方法有点变态,还有副作用,不过在我的应用中不碍事。就算不希望有副作用也可以简单的备份再恢复。
代码: 全选
" 返回 key 的唯一表达式
" string (string, string)
fun s:Key_GetKey(mode, key)
exe a:mode."noremap" "<expr>" a:key "<SID>Key_NoOp()"
let str=""
redir => str
exe "silent" a:mode."map"
redir END
for item in split(str, "\n")
let r = matchstr(item, '\m^\S*\s\+\zs\S\+\ze\s\+\S*\s\+'.s:snr.'Key_NoOp()$')
if r!=""
break
endif
endfor
" { 测试用行,可删
exe a:mode."unmap" a:key
" }
return r
endfun
" 空函数,供 Key_GetKey() 使用
fun s:Key_NoOp()
return ""
endfun
fun s:GetSnr()
return matchstr(expand('<sfile>'), '\zs<SNR>\d\+_\zeGetSnr$')
endfun
let s:snr=s:GetSnr()
delfun s:GetSnr
Re: vim 能否取得映射左边? [解决]
发表于 : 2011-05-27 23:16
由 自由建客
错了错了,不可靠,<lt>Esc> 和 <Esc> 会是一样的结果,压根就不应该处理,特殊键只要加反斜杠就行了。