Как вставить результаты поиска: g / foo / p в конец файла? - PullRequest
2 голосов
/ 18 октября 2011

1) Я ищу foo в файле с помощью глобальной команды: g:

:g/foo/p

и я хочу вставить результаты в конец файла. Как мне поступить?

2) Тот же вопрос (или это?) С результатами выражения echo:

:echo IndexByWord(['word1', 'word2', 'word3', etc])

(об этой функции см .: Vim: как проиндексировать простой текстовый файл? )

Заранее спасибо

Ответы [ 3 ]

7 голосов
/ 18 октября 2011

Я не знаю о (2), но для (1) измените его на :g/foo/t$. Это скопирует (t) строку в последнюю адресуемую строку ($).

4 голосов
/ 18 октября 2011

Вы можете перенаправить сообщения в регистр

:redi @"
:g/foo/p
:redi END
:$pu
1 голос
/ 19 октября 2011

2) :call append('$', split(IndexByWord(['foo', 'bar']), '\n'))

:h append(

append({lnum}, {expr})                  *append()*
        When {expr} is a |List|: Append each item of the |List| as a
        text line below line {lnum} in the current buffer.

:h split(

split({expr} [, {pattern} [, {keepempty}]])         *split()*
        Make a |List| out of {expr}.

Использование '$' в качестве lnum равно последней строке в буфере.

Вам необходимо использовать split (), поскольку функция, на которую вы ссылались, IndexByWord (), возвращает строку. Мне кажется, что вы можете изменить IndexByWord (), чтобы он возвращал список.

Если вы измените эту строку в IndexByWord ():

return join(result_list, "\n")

в

return result_list

Добавление немного проще, чем:

:call append('$', IndexByWord(['foo', 'bar']))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...