Мне было интересно, есть ли синтаксис для указания диапазона относительных строк в vim / ex, который не дает «недопустимый диапазон», а вместо этого получает столько строк, сколько может.

1
Faissaloo 2 Ноя 2018 в 21:43

2 ответа

Лучший ответ

Встроенного способа нет, но вы можете самостоятельно преобразовать относительные диапазоны в абсолютные номера строк, а затем ограничить диапазон доступными строками с помощью :help min() и :help max(). Так, например, следующий относительный диапазон:

:.-5,.+5 print

Эквивалентно этому:

:execute (line('.') - 5) . ',' . (line('.') + 5) 'print'

Будет преобразовано в это:

:execute max([1, (line('.') - 5)]) . ',' . min([line('$'), (line('.') + 5)]) 'print'
1
Ingo Karkat 5 Ноя 2018 в 12:15

Мой плагин CmdlineSpecialEdits имеет (среди многих других) {{X0} } отображение, которое изменяет относительные диапазоны, такие как .-5,.+5, на абсолютные номера строк и наоборот. Он также исправляет адресацию за пределами границ (<= 0 и больше, чем номер последней строки) и обратные диапазоны.

0
Ingo Karkat 8 Апр 2020 в 07:46