Vimなしでシェルスクリプトでテキストを置き換えてエンコードを変更するには?

Vimなしでシェルスクリプトでテキストを置き換えてエンコードを変更するには?

次のシェルスクリプトがあります。

vim file.xml -c "s/\r/\r/g" -c "set fileencoding=utf8" -c "wq"

(macOS)端末ではうまく動作しますが、他のプログラム(AppleScriptを実行しているFileMaker)で実行すると動作が停止します。私の考えでは、Vimが実際に起動していて(ターミナルで点滅しているのを見ましたが)、FileMakerやAppleScriptが失敗するためです。

インターフェイスを持つアプリケーションを起動せずにコマンドラインツールのみを使用して上記と同じことを行うにはどうすればよいですか?

答え1

exスクリプトを担当する人はVimです。

Vimと同じコマンドを使用しますが、端末なしで実行できます。 「ミュート」フラグを渡すことができます-s

バラより:help -s-ex:

-s:自動またはバッチモード。 [...] Vim を使用してファイルから Ex コマンドを実行する場合に使用します。端末の代わりに。 [...]

(これを行うと-s診断やエラーメッセージが表示されず、追加の副作用がある可能性があります。詳細については、完全なヘルプを参照してください。あなたの場合は必要ないかもしれませんが、おそらく必要です)。

次のようにコマンドを実行できます。

ex -s file.xml -c "s/\r/\r/g" -c "set fileencoding=utf8" -c "wq"

「ex-mode」も-eこのフラグと一緒に使用できるため、このフラグも機能します。

vim -e -s file.xml -c "s/\r/\r/g" -c "set fileencoding=utf8" -c "wq"

答え2

sedvimですがスクリプト用です。これにより、データの転送や1つ以上のファイルの処理に使用できます。 vi、edと同じコードに基づいています。非対話型なので窓がありません。

vimところで、独自のウィンドウがないようです。たぶん何か(ラッパー)がウィンドウから始めているかもしれません。

答え3

これが問題の場合は、チェックアウトされた(選択された)ファイルにUTF16を使用し、チェックイン/アウト時にUTF8間で変換するようにgit設定できます(詳細gitattributes(5)、通常は.gitattibutesストレージルートのファイルにあります)。 UTF8 はworking-tree-encoding内部でgit使用されます (例:diff検索、コンテンツ表示など)。

注意してください:ネイティブではないGitはこれを理解せず、悲しみを引き起こす可能性があります。

関連情報