Многострочная вставка (ctrl-r) в ex или поиск | замените ^ M на \ r - PullRequest
0 голосов
/ 07 мая 2018

Когда я набираю несколько строк и вставляю их в командную строку, каждая новая строка будет ^M вместо \r.Например, если я копирую следующие две строки в визуальном режиме (с помощью команды Vjy):

line1
line2

и вставляю их в режиме командной строки (поиск) с помощью команды /<c-r>", я получаю:

/line1^Mline2

Но я ожидал: /line1\rline2

Что я хочу сделать, это выделить вставленную строку, что полезно, когда я вставляю блок кода.Я знаю, что могу выбрать его с помощью

`[v`] 

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

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Мне нужно было так часто «приводить» содержимое регистра в определенный (символьно / линейно / блочно) режим, я написал для него плагин UnconditionalPaste . Он предоставляет gcp, glp и т. Д. Альтернативы встроенным командам вставки, которые запускают определенный режим; некоторые варианты также доступны как сопоставления режима командной строки .

Отображение <C-r><C-q> запрашивает строку-разделитель, а затем вставляет содержимое регистра символьно, с каждой строкой, разделенной им. Таким образом, для достижения желаемого результата это будет <C-r><C-q>"\\r<CR>.

Примечание. Если вы хотите выполнить поиск по многострочному тексту, вам действительно придется использовать \n вместо \r.

0 голосов
/ 07 мая 2018

Копирование следующего абзаца в визуальном режиме:

line1
line2
line3

и вставка его в командной строке (с <c-r>") должна дать line1^Mline2^Mline3^M. Если вы хотите, чтобы этот текст был line1\rline2\rline3\r, вы можете определить следующую функцию и карту:

function! Substitute()                                                          
    silent! let g:p=substitute(@", "\\n", "\\\\r", "g")                         
    call feedkeys(":", 'n')                                                     
endfunction                                                                     
nnoremap <silent> : :call Substitute()<cr>                                      

Команда let g:p=substitute(@", "\\n", "\\\\r", "g") найдет каждый ^M в безымянном регистре (:help quotequote), заменит его на \r и сохранит выходную строку в p. Чтобы вставить содержимое p в командной строке, используйте <c-r>=p.

...