搜尋

首頁  >  問答  >  主體

Vim怎麼批次處理檔案將tab變成space?

以前編碼習慣不太好,所以程式碼中用到的tab很多。
現在我想把tab轉化為space,透過設定vimrc然後執行:ret指令就可以了,問題是需要被處理的檔案有很多,手動為每個檔案執行:ret指令不太現實,請問我可以從哪個角度考慮來解決這個問題?

过去多啦不再A梦过去多啦不再A梦2743 天前726

全部回覆(10)我來回復

  • 大家讲道理

    大家讲道理2017-05-16 16:43:14

    例如你要處理的都是python文件,那麼cd到專案根目錄:
    1. $> vim `find . -type f -name "*.py"` // 用VIM開啟所有要處理的檔案
    2. :argdo :ret | update // 對vim參數清單中的所有檔案都執行:ret指令並且儲存

    另外可以再了解下bufdo, windo指令的用法。

    以上只是針對樓主的問題展示VIM是可以很輕鬆做到這個的,不用一個一個去弄。當然按照樓上的思路寫腳本也是很好的方法。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-16 16:43:14

    試試 sed 吧:sed -i -e "s/t/ /g" *.py

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 16:43:14

    建議別用 vim,寫個腳本處理。
    可以用 shell 寫,find + sed 指令就可以搞定了,也可以用 python 寫,os.path.walk 遍歷文件,逐行掃描,沒多少程式碼的。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 16:43:14

    雷雷

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 16:43:14

    這種問題可以用正規表示式來處理呀,不過最好不要vim一個個搞過去,寫個python腳本來跑正則表達式應該更好一些

    回覆
    0
  • 黄舟

    黄舟2017-05-16 16:43:14

    expand shell 指令是乾這個的。

    回覆
    0
  • 某草草

    某草草2017-05-16 16:43:14

    批次用正規是比較爽的,不過一定要vim的話,@shizhz的答案不錯。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-05-16 16:43:14

    sed -i "s/t/ /g" *.py

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 16:43:14

    ls *.py | while read file;do
        vi $file<<EOF
    :%s/^I/    /g
    :wq
    EOF
    done
    

    使用vi(m)的非互動方式。
    ^I使用CTRL+V+I輸入。
    EOF後面不能用空​​格。
    vi(m)指令前不能有空格。

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 16:43:14

    :h retab

    回覆
    0
  • 取消回覆