Подтвердить что ты не робот

Какова цель регистра выражения?

Просто смотрел этот http://www.derekwyatt.org/vim/vim-tutorial-videos/vim-advanced-tutorial-videos/#expression-register, и я не вижу никакой пользы от использования <c-r>= vs <c-o>normal или что-то в этом роде (хотя я уверен, что это только потому, что я что-то не понимаю)

4b9b3361

Ответ 1

В нем много интересных применений, многие из них. В видео Derek он использовался для вызова внешний script. Дело в том, что вы можете это сделать, не оставляя вставку Режим. Вы сказали, что не видите преимуществ по сравнению с <c-o>, но как вы к этому?

Регистр выражений вставляет результат из выражения. Вам не нужно :call функция, например, как показано на видео. Я постараюсь показать вам еще два использования, которые я нахожу интересными и часто использую.

1. Оценка математики

Выражение 2 оценивается как 2, справа (как в VimScript)? Таким образом, вы можете использовать чтобы вставить некоторые числа в результате вычисления. Для Например, учитывая, что вы находитесь в режиме вставки в этом файле:

... the total sum is $

Теперь нажмите <c-r>= и введите

5*6+3.2*8+5.52<enter>

И результат:

... the total sum is $61.12

Практический, eh?

2.Использование переменных значений

Скажем, вам нужно указывать заголовки в тексте. Заголовки начинаются с # like в:

# Heading

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.

# Another Heading

Consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

Учитывая, что это длинный список, вам нужно будет найти способ сделать это быстро. Здесь один подход:

  • Создать переменную для хранения текущего значения
  • Найдите следующий заголовок
  • Вставьте содержимое этой переменной (используя регистр выражения)
  • Приращение переменной

Это можно сделать, сначала создав переменную:

:let i=1

И затем с помощью макроса:

qa            ; start recording
/^#<CR>       ; find next heading
0w            ; move to the first word
i             ; switch to insert mode
<c-r>=i<CR>   ; insert the number
.<esc>        ; insert a dot and back to normal mode
:let i+=1<CR> ; increment the variable
q             ; stop recording

И теперь вы можете нажать @a и использовать @@, чтобы впоследствии вставить числа в ваши заголовки.

Ответ 2

Я использую регистр выражений следующим образом: <C-r>=618+27<CR>. Это очень полезно при выполнении CSS.