Передача вывода команды Vim в команду оболочки - PullRequest
2 голосов
/ 14 января 2012

Чтобы найти все измененные файлы в Vim, я набираю

:ls

Это даст мне такой список

2  h   "index.html"                   line 98
3  h   "Category/Category.Bg_S.js"    line 1
4  h   "Category/Category.Box0_S.js"  line 1
5  +   "Category/Category.Box10_S.js" line 1
6      "Category/Category.Box11_S.js" line 1
7  +   "Category/Category.Box12_S.js" line 1

Но если буферов слишком много, это может быть утомительно,То, о чем я думал, было бы что-то вроде:

:ls !grep +

для передачи содержимого ls vim в функцию grep оболочки.Но это не работает.Поэтому у меня есть 2 вопроса:

  1. Как мне найти список всех измененных файлов?
  2. Если есть более простое решение для 1), то как бы я, для любогопричина, передать вывод команды vim в команду оболочки?

1 Ответ

2 голосов
/ 15 января 2012

Самый простой способ, вероятно, состоит в том, чтобы «перенаправить» вывод в переменную vim, а затем отфильтровать его для измененных буферов:

function! GetModifiedBuffers()
    redir => bufoutput
    buffers  " same as ls
    redir END
    return join(filter(split(bufoutput,'\n'),"v:val =~ '\\%8c+'"),'\n')
endfunction

Затем сделать что-то вроде :echo GetModifiedBuffers(), чтобы показать список измененных буферов.

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