level 3
有个问题大家帮帮我,比如在普通模式下输入w就w.而当我按下f8后再按w,就比如影射成e了,按f9比如就影射成g了,总体来说就是想实现在某一方式下通过不同的键,来实现某一套按键影射方案,求求帮助忙
2016年10月17日 11点10分
1
level 3
也就是普通模式下的命令可以是二套三套或者更多,通过条件判断触发接键,实现某套键盘影射
2016年10月17日 11点10分
2
level 3
也就是普通模式下的命令可以是二套三套或者更多,通过条件判断触发接键,实现某套键盘影射
2016年10月17日 11点10分
3
level 3
不是这个意思 ,比如 没有设置的情况下
我按q 显示q
我按w 显示w
我按e 显示e
然后比如我按下了#
这个#就好象 caps lock 那种性质一样
按了#后 我键盘上 所以的都不一样了
换成了 我的另1套设置
那时再去 按
就比如下面这样 设置 1 再按#退出设置1
:map q a
:map w s
:map e d
当我又按下 $ 后设置 2
:map q z
:map w x
:map e c
这时按
#变回设置1 不按#
按$退出 设置2
我要的是可以实现这个功能的脚本
2016年10月22日 15点10分
5
level 10
原则上是可以的,相当于是在vim已有的6个模式基础上再增加数个自己定义的模式而已。自己定义一个表示变量的模式,按键映射到自定义的函数上,进入检查模式即可。不过极不推荐这样做,26个字母加大小写,就52个命令。再用ctrl或alt修饰就又52个。插入模式用ctrl或alt修饰可以再定义52个不同的命令就已经很多了。另外还有<F1-12>以及诸多标点可用。加上序列按键命令,其实奇多。默认功能不常用的本来就可以覆盖,还感觉不够使恐怕是自己的使用方法有问题。
2016年10月22日 22点10分
6
level 3
能提供下试范代码吗,我真的有用,
但三言二语根本讲不清楚,
我保证从宏观出发很符合逻辑,楼上的大哥帮帮我好吗
上面说的我只是举个例子,让听的人容易明白我要的什么样功能
然后我要用这些功能完成些复杂的操作,
如果真是我上面例子中这么简单应用,
没这功能也能实现的
大哥大姐们帮帮我吧
2016年10月24日 15点10分
7
level 10
我的意思是类似这样:
" indicates what mode is it
let s:mymode = 0
" define some bit-variables
let s:f8 = 0x01
let s:f9 = 0x02
if exists(*s:Setmode)
finish
endif
noremap <F8> :call <SID>Setmode("F8")<CR>
noremap <F9> :call <SID>Setmode("F9")<CR>
noremap <silent> w :call <SID>Keymaps("w")<CR>
noremap <silent> W :call <SID>Keymaps("W")<CR>
noremap <silent> <C-W> :call <SID>Keymaps("<CW>")<CR>
noremap <silent> q :call <SID>Keymaps("q")<CR>
noremap <silent> Q :call <SID>Keymaps("Q")<CR>
noremap <silent> <C-Q> :call <SID>Keymaps("<CQ>")<CR>
function! s:Setmode(key)
if a:key == "F8"
let s:mymode = xor(s:mymode, s:f8)
elseif a:key == "F9"
let s:mymode = xor(s:mymode, s:f9)
else
" do nothing or raise some errors.
endif
call s:Showmode()
endfunction
function! s:Showmode()
echon "mode is < "
if and(s:mymode, s:f8)
echon "F8 "
endif
if and(s:mymode, s:f9)
echon "F9 "
endif
echon ">"
endfunction
function! s:Keymaps(key)
if mode() == "n" " define keys for normal mode
if s:mymode == 0 " define the default key mapping
if a:key == "w"
echo "n-w"
elseif a:key == "W"
echo "n-W"
elseif a:key == "<CW>"
echo "n-<C-W>"
elseif a:key == "q"
echo "n-q"
elseif a:key == "Q"
echo "n-Q"
elseif a:key == "<CQ>"
echo "n-<C-Q>"
endif
elseif s:mymode == s:f8 " define key mappings when <F8> is on
if a:key == "w"
echo "n-<f8>-w"
elseif a:key == "W"
echo "n-<f8>-W"
elseif a:key == "<CW>"
echo "n-<f8>-<C-W>"
elseif a:key == "q"
echo "n-<f8>-q"
elseif a:key == "Q"
echo "n-<f8>-Q"
elseif a:key == "<CQ>"
echo "n-<f8>-<C-Q>"
endif
elseif s:mymode == s:f9
if a:key == "w"
echo "n-<f9>-w"
elseif a:key == "W"
echo "n-<f9>-W"
elseif a:key == "<CW>"
echo "n-<f9>-<C-W>"
elseif a:key == "q"
echo "n-<f9>-q"
elseif a:key == "Q"
echo "n-<f9>-Q"
elseif a:key == "<CQ>"
echo "n-<f9>-<C-Q>"
endif
elseif s:mymode == or(s:f8, s:f9) " when both <F8> and <F9> is on
if a:key == "w"
echo "n-<f8f9>-w"
elseif a:key == "W"
echo "n-<f8f9>-W"
elseif a:key == "<CW>"
echo "n-<f8f9>-<C-W>"
elseif a:key == "q"
echo "n-<f8f9>-q"
elseif a:key == "Q"
echo "n-<f8f9>-Q"
elseif a:key == "<CQ>"
echo "n-<f8f9>-<C-Q>"
endif
endif
else " you can define keys for cmd-line/visual/insert/... modes
if s:mymode == 0
if a:key == "w"
echo "o-w"
elseif a:key == "W"
echo "o-W"
elseif a:key == "<CW>"
echo "o-<C-W>"
elseif a:key == "q"
echo "o-q"
elseif a:key == "Q"
echo "o-Q"
elseif a:key == "<CQ>"
echo "o-<C-Q>"
endif
elseif s:mymode == s:f8
if a:key == "w"
echo "o-<f8>-w"
elseif a:key == "W"
echo "o-<f8>-W"
elseif a:key == "<CW>"
echo "o-<f8>-<C-W>"
elseif a:key == "q"
echo "o-<f8>-q"
elseif a:key == "Q"
echo "o-<f8>-Q"
elseif a:key == "<CQ>"
echo "o-<f8>-<C-Q>"
endif
elseif s:mymode == s:f9
if a:key == "w"
echo "o-<f9>-w"
elseif a:key == "W"
echo "o-<f9>-W"
elseif a:key == "<CW>"
echo "o-<f9>-<C-W>"
elseif a:key == "q"
echo "o-<f9>-q"
elseif a:key == "Q"
echo "o-<f9>-Q"
elseif a:key == "<CQ>"
echo "o-<f9>-<C-Q>"
endif
elseif s:mymode == or(s:f8, s:f9)
if a:key == "w"
echo "o-<f8f9>-w"
elseif a:key == "W"
echo "o-<f8f9>-W"
elseif a:key == "<CW>"
echo "o-<f8f9>-<C-W>"
elseif a:key == "q"
echo "o-<f8f9>-q"
elseif a:key == "Q"
echo "o-<f8f9>-Q"
elseif a:key == "<CQ>"
echo "o-<f8f9>-<C-Q>"
endif
endif
endif
endfunction
2016年10月25日 00点10分
8
我这里举的例子只是为了演示。实际在用的时候可以把相定义的键映射存在一个字典里,然后代码就好写了,可读性也会提高。
2016年10月25日 00点10分
根据需要,mymode 也可以是个全局变量。
2016年10月25日 00点10分