[vi][小技] vimを使って複数のファイルの改行コードを一括変更する
よそからもらってきたファイルを展開してアチャー な気分になったとき用です。
下記は、カレントディレクトリ以下にある拡張子PHPのファイルの改行コードをLFにします。
find . -name \*.php -exec vi -c ':e ++ff=dos' -c ':set ff=unix' -c ':wq' \{\} \;
解説
find [ディレクトリ]
指定したディレクトリ以下のファイルを探します。
-name \*.php
ファイル名の末尾が.phpに一致するファイルを探します。
-exec [コマンド] \{\} \;
見つかったファイルひとつひとつに対してコマンドを実行します。
\{\}
の部分がファイル名になります。
\;
はコマンドの終了位置を示します。
-c ':e ++ff=dos'
改行コードをCRLFとしてファイルを開き直します。
-c ':set ff=unix'
改行コードをLFにするようにします。
-c ':wq'
ファイルを保存してviを終了します。
試した環境
viのバージョン
% vi --version (~/projects/nikkeir-portal/src)
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 22:32:42)
Included patches: 1-1829
Extra patches: 8.0.0056
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by pkg-vim-maintainers@lists.alioth.debian.org
Small version without GUI. Features included (+) or not (-):
+acl -farsi -mouse_sgr -tag_any_white
-arabic -file_in_path -mouse_sysmouse -tcl
-autocmd -find_in_path -mouse_urxvt -termguicolors
-balloon_eval -float -mouse_xterm +terminfo
-browse -folding +multi_byte -termresponse
+builtin_terms -footer -multi_lang -textobjects
-byte_offset +fork() -mzscheme -timers
-channel -gettext -netbeans_intg -title
-cindent -hangul_input +packages -toolbar
-clientserver +iconv -path_extra -user_commands
-clipboard -insert_expand -perl +vertsplit
-cmdline_compl -job -persistent_undo -virtualedit
+cmdline_hist +jumplist -printer +visual
-cmdline_info -keymap -profile -visualextra
-comments -langmap -python -viminfo
-conceal -libcall -python3 -vreplace
-cryptv -linebreak -quickfix +wildignore
-cscope -lispindent -reltime -wildmenu
-cursorbind -listcmds -rightleft +windows
-cursorshape -localmap -ruby +writebackup
-dialog -lua -scrollbind -X11
-diff -menu -signs +xfontset
-digraphs -mksession -smartindent -xim
-dnd -modify_fname -startuptime -xsmp
-ebcdic -mouse -statusline -xterm_clipboard
-emacs_tags -mouse_dec -sun_workshop -xterm_save
-eval -mouse_gpm -syntax -xpm
+ex_extra -mouse_jsbterm -tag_binary
-extra_search -mouse_netterm -tag_old_static
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -fdebug-prefix-map=/build/vim-vY1bx1/vim-7.4.1829=. -fPIE -fstack-protector-strong -Wformat -Werror=format-security -DTINY_VIMRC -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lselinux -lacl -lattr -ldl