Method1: map <F7> <ESC>:windo exe "normal \<foobar<C-W>C-W>K"<CR> Method2: map <F8> <ESC>:windo wincmd K<CR> Method3: map <F9> <ESC>:call HorizontAll()<cr> function! HorizontAll() windo exe "normal \<c-w>K" endfunction
小结:
1 map {rhs} 的字串中,ctrl-w会被转意成insert mode下的一个删除命令,该命令删除当前位置的前一个单词,方法1中的foobar就是为了中和掉这个转意。
第一种方法,也是我最开始想到方法,因为ctrl-w的转意,导致映射死活不生效,让我第一次对Vim大为恼怒。隔了一晚上后,才想到中间加一个单词进行中和,早上过来一试果然生效。
2 当为第一种方法的“高明”做法而沾沾自喜的时,才发现还有两种更优雅,更灵活的方法,而第一种方法是如此地丑陋,不禁感叹,想象力有限!受益于伟大祖国的应试教育?不知道。
3 第1与第3方法是我自己睡了一晚后想出来的,第2种方法是翻文档的时候碰见wincmd想起来的,也算半个原创,这也说明创新源于持续不断的努力。
时间: 2024-11-05 17:23:30