Vim:多种模式的重载映射

我使用映射到普通模式命令,我也想在插入模式下工作.这可以通过添加< 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

.现在没有命令模式,因为这很棘手,可能没用.

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...