Не уверен, что я точно следую тому, что вы пытаетесь сделать ...
Но обратите внимание на некоторые моменты:
- Вам не нужно
:normal
для запуска команда Ex, такая как set winminheight=0
- Для команд Ctrl-W вы также можете использовать
wincmd
, что означает, что для них также можно использовать команды Ex. - Наконец, вам не нужны скобки вокруг условия в операторе
if
, и вам также не нужен g:
('winminheight'
- это глобальная опция).
Собираем все вместе:
nnoremap <silent> <leader>0
\ :if &winminheight == 0 <BAR>
\ set winminheight=1 <BAR>
\ wincmd = <BAR>
\ wincmd _ <BAR>
\ else <BAR>
\ set winminheight=0 <BAR>
\ wincmd _ <BAR>
\ endif <CR>
Я рекомендую сильно избегать использования :execute
и :normal
непосредственно из сопоставления ... Поскольку само сопоставление расширит ключ последовательностей, вы в конечном итоге получаете несколько уровней экранирования, и это действительно трудно сделать правильно.
Я действительно попытался отладить ваше отображение, и после нескольких попыток я нашел это решение, которое вы увидите, очень некрасиво:
execute "normal! :set winminheight=1\<lt>cr>\<lt>c-w>=\<lt>c-w>_" <BAR>
(Это только первый :execute
, но вы получите картинку .)
Даже использование только команд Ex все еще сложно, так как вам нужны разделители <BAR>
, которые не всегда хорошо работают с каждой командой ...
Гораздо лучше просто определить функцию и пусть отображение вызывает функцию (или использует отображение <expr>
), тогда вам не нужно беспокоиться ни об одном из экранирования в теле функции. Гораздо проще!