VIM - Передача списка команд с двоеточием через командную строку

Добрый день,

Я пишу простой сценарий в своем файле BASHRC, чтобы учесть то, что я не смог решить в предыдущем вопросе:

Параллельное представление в Vim svn-diff для всего каталога

Я в основном генерирую список всех файлов, которые имеют статус «Измененный» SVN. Для каждого из этих файлов я хочу создать параллельный визуальный diff, преобразовать его в HTML, а затем добавить в работающий HTML-файл.

eg:

MODIFIED_FILES="$(svn status | grep "^M" | cut -c9-)"
for i in ${MODIFIED_FILES}; do
  # Generate a side-by-side diff in vim via VIMDIFF
  # Convert via ToHTML
  # Append the HTML file to a file called "overall_diff.html"
done

Я могу достаточно легко выполнить vimdiff, создав чистую копию файла и имея копию измененного файла.

Сначала у vimdiff возникла проблема, т.е.:

2 files to edit
Error detected while processing /Users/Owner/.vimrc:
line   45:
E474: Invalid argument: listchars=tab:>-,trail:.,extends:>,precedes:«
Press ENTER or type command to continue

Итак, я пытаюсь обойти это, чтобы мне не приходилось нажимать ENTER для каждого файла в моем списке.

Затем мне нужно, чтобы vimdiff вызывал команду ToHTML, а затем выполнял команду для добавления буфера HTML к работающему файлу:

:'<,'>w! >>overall_diff.html

Короче, как мне:

  1. Избавьтесь от этой проблемы с помощью listchars при вызове vimdiff. Эта проблема не возникает при запуске vim, поэтому я не знаю, почему она возникает при запуске vimdiff.
  2. Передайте VIM список команд с двоеточием, чтобы он запускал их в startup, не требуя изменения моего файла .vimrc.

person Cloud    schedule 22.05.2013    source источник
comment
Взгляните на vim -c на справочных страницах   -  person FDinoff    schedule 23.05.2013
comment
Вроде должно работать. Вам нужно будет показать нам, как выглядит ваш вызов vimdiff с двумя файлами. Включить set -vx, чтобы увидеть результаты отладки оболочки? Какой-то другой персонаж закрался в вашу строку cmd? (Вы, наверное, знаете это, извините). Если вы возьмете тот же cmd, который сгенерирован вашим скриптом, и скопируете/вставьте в строку cmd, будет ли vimdiff жаловаться? Удачи.   -  person shellter    schedule 23.05.2013


Ответы (1)


В конце концов, я создал отдельный файл VIMRC, который передается команде vim во время выполнения через:

`vim -d file1 fil2 -u my_special_vimrc_file`

function createVimDiff()
{
   # Create some buffers
   TEMP_FILE="./tmp_file"
   VIM_TEMP="./temp.html"
   REVISION=""
   BUFFER_FILE="./overall_diff.html"
   # Get a list of the files that have changed
   MODIFIED_FILES="$(svn status | grep '^M' | cut -c9-)"
   # Remove buffers
   rm "${BUFFER_FILE}"
   for i in ${MODIFIED_FILES}; do
      # Remove intermediate buffers
      rm "${TEMP_FILE}"
      rm "${VIM_TEMP}"
      # Get the current SVN rev number for the current file
      REVISION="$(svn info ${i} | grep Revision)"
      # Echo the name of the file to the report
      echo "FILE: ${i}" >> "${BUFFER_FILE}"
      # Same with the revision number
      echo "${REVISION}" >> "${BUFFER_FILE}"
      echo "<br>" >> "${BUFFER_FILE}"
      # First print a copy of the unmodified file in a temporary buffer
      svn cat "${i}" > "${TEMP_FILE}"
      # Now print the unmodified file on the left column, and the
      # modified file in the right column, so they appear side-by-side
      vim -d "${TEMP_FILE}" "${i}" -u ~/.vimdiff_rc
      # Write the side-by-side diff to a file
      cat "${VIM_TEMP}" >> "${BUFFER_FILE}"
      echo "<br>" >> "${BUFFER_FILE}"
   done
   # Cleanup temporary buffers
   rm "${TEMP_FILE}"
   rm "${VIM_TEMP}"
}

И в мой файл VIMRC было помещено следующее:

" Convert the diff to HTML
autocmd VimEnter * silent TOhtml

" Write output to temporary buffer
autocmd VimEnter * w! ./temp.html

" Quit VIM
autocmd VimEnter * qa!
person Cloud    schedule 22.05.2013