1

Я хотел, чтобы простая аббревиатура работала как быстрый разделитель страниц, такой как

набрав:

'>>>'

будет выглядеть так:

'==============='

2 других требования: 1) я хочу иметь возможность выполнять последовательные сокращения (более одного подряд) и 2) иметь возможность печатать текст после разделителя, а затем добавить другой разделитель. Таким образом, конечный разделитель может выглядеть так:

============================== ЗАГОЛОВОК ТЕКСТА ================== ============

Я попробовал следующую строку:

iabbr <silent> >>> ===============<c-r>=Eatchar('\m\s\<bar>/')<cr>

... но он не может выполнить вышеуказанные требования из-за тонкостей, связанных с классом предшествующих символов (см .:h full-id и т. д.). В итоге я получил следующее:

inoremap >>> ===============<c-r>=Eatchar('\m\s\<bar>/')<cr>

Это работает, но я чувствую, что переназначение может быть излишним, когда все, что я действительно хочу, это простая замена строки. Есть лучший способ сделать это?

1 ответ1

0

Самый простой способ справиться с этим - это вызвать пользовательскую функцию. Я придумал следующее доказательство концепции. Пара недостатков, хотя:

Если вместо отображений использовать сокращения, символ, введенный после вызывающего его сокращения, будет включен как часть текста, захваченного пользователем с помощью вызова input() , поэтому я использовал отображение.

Проблема с отображением заключается в том, что при вводе> он не будет отображаться в файле до тех пор, пока вы не введете что-то, что скажет Vim, что вы не пытаетесь инициировать сопоставление (или не подождете достаточно долго, чтобы время обнаружения сопоставления пришло из).

imap <expr> >>> MyHeader('=')

function! MyHeader(fillchar)
    let l:text = input("Header Text: ")
    let l:len = ((&tw ? &tw : 79) - len(text) - 2) / 2
    let l:fill = repeat(a:fillchar, l:len)
    return l:fill . ' ' . l:text . ' ' . l:fill
endfunction

Так как это всего лишь подтверждение концепции, я не пытался ее усовершенствовать. Например, ширина заголовка может быть "отключена на один", если количество символов в тексте заголовка или текстовой textwidth является нечетным числом. Я оставлю это на ваше усмотрение, чтобы исправить это и добавить любые другие уточнения, которые вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .