Vimscript удаляет управляющие символы - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть функция vimscript, показанная ниже, которая выполняет поиск и замену текущего скопированного / скопированного текстового буфера и вставляет их в файл.

function Repaste(s, ...)
  for i in a:000
    let sub = substitute(getreg('"'), a:s, i, 'ge')
    let sane = substitute(sub, '[^[:print:]]', '\n', 'ge')
    call append(line('.'), sane)
  endfor
endfunction

command -nargs=* RP call Repaste(<f-args>)

Когда я вызываю эту функцию, я получаю ^@символы вместо новых строк.Вот пример извлеченного / скопированного текста

set cindent

Вот пример выполненной команды

:RP c d e f

Вот вывод

set findent ^@  
set eindent ^@ 
set dindent ^@

Как удалить эти символы и почему они появляются?Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Замена вызова на append на put=sub дает требуемый результат.

0 голосов
/ 26 сентября 2018

Функция append() является низкоуровневой.:help append() показывает, что {expr} как String вставляется как одна текстовая строка , независимо от новых строк в его содержимом.^@ - это представление \n внутри линии;cp :help <Nul>.

Если вы действительно хотите продолжать использовать append(), вы должны предоставить тип List ;чтобы получить это, вы можете split() вашу строку:

call append(line('.'), split(sane, '\n'))

Тем не менее, я думаю, вам лучше использовать функцию более высокого уровня для вставки созданных строк, используя :put с регистр выражений для вставки содержимого вашей переменной:

put =sane

Это:

  • автоматически обрабатывает встроенные символы новой строки
  • устанавливает метки изменения'[ и '] к вставленному тексту
  • распечатать сообщение 4 more lines (если введенное число превышает порог 'report').
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...