簡體   English   中英

VIM - 通過命令行傳遞冒號命令列表

[英]VIM - Passing colon-commands list via command-line

美好的一天,

我正在BASHRC文件中編寫一個簡單的腳本,以容納我在上一個問題中無法解決的問題:

在整個目錄的svn-diff的Vim中並排查看

我基本上生成了一個具有“修改”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,讓它在startup時運行它們,而不需要更改我的.vimrc文件。

最后,我創建了一個單獨的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!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM