我使用映射到普通模式命令,我也想在插入模式下工作.这可以通过添加< C-o>来完成.插入模式映射:
nmap <C-Up> 10<Up> imap <C-Up> <C-o>10<Up>
但这意味着重复每次映射两次.
为了避免重复,我试图“重载”其他一些键,然后将其用于模式特定部分:
" F12 selects prefix suitable for current mode nmap <F12> <Nop> imap <F12> <C-o> " single mapping relying on "overloaded" F12 map <C-Up> <F12>10<Up>
出于某种原因,它不起作用.插入模式中的F2仅插入< F2>.作为文字.
知道什么是错的,以及如何解决它?
如果您可以将解决方案扩展到可视模式,则可获得积分.
没有命令可以为所有模式定义映射::正常,运算符挂起和可视模式的映射映射(实际上是可视的,一次选择),这在文档中有明确说明.对于所有模式都有相同的映射没有任何意义,尽管与移动节点不同,可以在具有完全相同的rhs的所有模式中进行保存:
function s:Save() update return '' endfunction noremap <expr> <F2> <SID>Save() noremap! <expr> <F2> <SID>Save()
. noremap!是另一种多模式映射命令,它现在涵盖了插入和命令模式.您无法将光标从< SID> Save()函数(文本锁定)移动,因此此方法不适用于光标移动命令,但您可以使用变量以便不重复相同的操作两次:
let s:tendownlhs='10j' execute ' noremap <C-Down> '.s:tendownlhs execute 'inoremap <C-Down> <C-o>'.s:tendownlhs
.现在没有命令模式,因为这很棘手,可能没用.