比如
getmapl("<c-a>")
getmapl("<C-a>")
getmapl("<C-A>")
结果都是 "<C-A>"
再比如
getmapl("<m-m>")
getmapl("<M-m>")
getmapl("<A-m>")
结果都是 "í" 或 "<A-m>"
--------------------------------
见五楼
vim 能否取得映射左边? [错误问题]
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
vim 能否取得映射左边? [错误问题]
上次由 自由建客 在 2011-05-27 23:19,总共编辑 3 次。
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 能否取得映射左边?
你能不能描述清楚你的问题? 问问题都不会问?
有 getmapl 这个函数么?
需要获取map的左边,要么判断有没有映射, 要么就重定向 :map 的输出然后过滤文本
有 getmapl 这个函数么?
需要获取map的左边,要么判断有没有映射, 要么就重定向 :map 的输出然后过滤文本
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: 能否取得映射左边?
getmapl() 是我臆造的,我要的其实是一个转换函数,就是把 <c-a> <C-a> <C-A> 这样的同义词转换成唯一的表示方式。
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 能否取得映射左边?
那跟你标题有什么关系?自由建客 写了:getmapl() 是我臆造的,我要的其实是一个转换函数,就是把 <c-a> <C-a> <C-A> 这样的同义词转换成唯一的表示方式。
你这样忽略大小写, 直接 =~? '<c-a>' 然后 upper 不就行了
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: vim 能否取得映射左边?
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
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: vim 能否取得映射左边? [解决]
错了错了,不可靠,<lt>Esc> 和 <Esc> 会是一样的结果,压根就不应该处理,特殊键只要加反斜杠就行了。
代码: 全选
"\<Esc>"