首页  >  问答  >  正文

Vim怎么批量处理文件将tab变为space?

以前编码习惯不太好,所以代码中用到的tab很多。
现在我想把tab转化为space,通过设置vimrc然后执行:ret命令就可以了,问题是需要被处理的文件有很多,手动为每个文件执行:ret命令不太现实,请问我可以从哪个角度考虑来解决这个问题?

过去多啦不再A梦过去多啦不再A梦2712 天前694

全部回复(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
  • 取消回复