Показать результат вместо X с неполным отображением в vim
В моем файле на ~/.vim/ftplugin/tex/insert.vim
У меня есть следующие сопоставления
; <Nul> is ctrl-space
imap <Nul> \,
imap <Nul><Nul> ~
imap <Nul><Nul><Nul> \enspace
imap <Nul><Nul><Nul><Nul> \quad
imap <Nul><Nul><Nul><Nul><Nul> \qquad
Это позволяет мне вставлять пробелы различной ширины, нажимая ctrl-space, при каждом нажатии пробел удлиняется. Когда я набираю первый Ctrl-пробел, я получаю X
и он ждет меня, чтобы увидеть, хочу ли я ввести больше Ctrl-пробелов или я закончил.
Я хотел бы знать, есть ли способ показать, каким будет пространство, либо ввести его непосредственно в буфер и изменить его, если он будет снова нажат, либо поместить его в строку состояния, пока я не закончу.
Я думаю, что это могло бы быть возможным, чтобы проверить, являются ли символы перед курсором \,
и если они заменяют его следующим пробелом, а если нет, проверьте остальные пробелы, которые я могу ввести, и, наконец, введите \,
если ни одно из мест не существует. Я просто не знаю, как сделать такую раскладку.
1 ответ
Ваше текущее картографическое решение основано на тайм-ауте отображения. Пока это не произойдет, Vim ждет дополнительных данных, и пока ничего не вставлено. Чтобы позже пересмотреть то, что было вставлено, вам необходимо полностью заменить подход.
Это может быть реализовано с :map <expr> <Nul>
, проверяя, что находится перед курсором, а затем возвращая <BS>
символы для удаления, за которыми следует заменяющий текст.
С плагином mjbrownie / swapit вы получите функциональность "переключения между альтернативами" (используя <C-a>
/ <C-x>
) бесплатно: просто поместите следующее в ~/.vim/ftplugin/tex/swapit.vim
:
SwapList spaces \, ~ \enspace \quad \qqad
Вы можете сохранить свой оригинал <Nul>
сопоставления для быстрой вставки, когда вы знаете, что хотите (или для начальной вставки), и использование swapit только для последующего пересмотра.