Существует два способа: один - интерполяция &textwidth
(символ &
превращает имя опции в переменную, содержащую ее значение; ср. :help :let-option
), как в @ Ответ Руслана Османова:
nnoremap <silent> <C-j> :execute "normal!" &textwidth . 'l'<CR>
Другим является :help :map-expression
, который автоматически оценивает правую часть сопоставления как выражение Vimscript. Я бы предпочел этот, так как он короче:
nnoremap <expr> <C-j> &textwidth . 'l'
Дальнейшие улучшения
Вы, вероятно, должны подумать, что делать, если 'textwidth'
не установлено, то есть ноль. Без обработки это приведет к движению 0l
, то есть к второму символу в строке. Вы можете использовать условное выражение, чтобы превратить это, например, в запрет. (Или сделайте звуковой сигнал, вернув '<Esc>'
вместо '').
nnoremap <expr> <C-j> (&textwidth == 0 ? '<Esc>' : &textwidth . 'l')
Действительно нужно?
Vim имеет встроенную команду :help gj
(и варианты для других направлений), которая делает нечто похожее на то, что вы пытаетесь реализовать. Если вы не пытаетесь решить особый случай (например, игнорируя такие параметры, как 'showbreak'
, которые еще больше уменьшают количество отображаемых символов), было бы целесообразно просто использовать (и, возможно, переназначить) встроенные модули.