Показать результат вместо 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 только для последующего пересмотра.

Другие вопросы по тегам