Как заменить выделенный текст в vimscript

#vim

#vim

Вопрос:

У меня есть некоторые определенные части файлов с неформатированным XML-кодом. Мне нужно написать функцию vimscript, которая выделяет текст и вызывает xmllint над ним.

Я знаю, что могу сделать это в командной строке :'<,'>!xmllint --format -

Но мне действительно нужно сделать то же самое в функции vimscript, и я не знаю, как сделать что-то вроде normal! вызова visual.

Я пробовал это, но это работает некорректно :

 function! MyFormat()
    ... stuff done here
    let startl = line("'<")
    let endl = line("'>")
    let line = getline(startl, endl)
    let r = system('echo "' . join(line, "") . '" | xmllint --format -')

    call setline('.', r)
endfunction
 

Комментарии:

1. Вам нужно или вы хотите ? Команда, которую вы дали, кажется, отлично справляется с задачей, так какую проблему вы пытаетесь решить и как вы планируете использовать эту функцию?

2. И вашему вопросу не хватает уровня детализации, необходимого для правильного ответа на него, самое главное, что вы пробовали .

3. Я обновил свой вопрос. Я думаю, может быть, у меня может возникнуть проблема с кавычками в строке injecte в системной функции

Ответ №1:

Каждая строка в скрипте Vim является командой Ex. Поскольку у вас уже есть рабочая команда Ex, вы также можете использовать ее.

 function! MyFormat()
    " ... stuff done here
    '<,'>!xmllint --format -
    " ... more stuff done here
endfunction
 

Но, опять же, данные отсутствуют, поэтому это может сработать … или нет, будет достаточно… или нет и т.д.