VIM - 通过命令行传递冒号命令列表

6

您好,

我正在编写一个简单的脚本,放在我的BASHRC文件中,以解决我之前提出的一个问题:

Vim中svn-diff整个目录的并排视图

我基本上生成了所有具有“修改”SVN状态的文件列表。 对于这些文件中的每一个,我想创建一个并排的可视差异,并将其转换为HTML,然后将其附加到正在运行的HTML文件中。

例如:

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. 解决在调用vimdiff时出现listchars问题。当我运行vim时,这个问题不会出现,所以我不知道为什么在运行vimdiff时会出现。
  2. 向VIM传递一个冒号命令列表,使其在启动时运行,而无需更改我的.vimrc文件。

1
请查看手册中的 vim -c - FDinoff
似乎应该可以工作。你得向我们展示一下使用两个文件调用vimdiff的命令是什么样子的。打开set -vx以查看shell调试输出?是否有其他字符混入了你的命令行中?(你可能已经知道了,抱歉)。如果你将脚本生成的相同命令复制/粘贴到命令行中,vimdiff是否仍然会报错?祝你好运。 - shellter
1个回答

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!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接