viの^ @、^ I、および$の意味は何ですか?


3

MapReduceでContext.write(k、v)を使用して(Javaを使用して)ファイルにデータを書き込むと、fileで次の内容が見つかります(viで開き、:set listがあります)。

^@R^@u^@n^@^I1$
^@a^@c^@c^@e^@s^@s^@^I1$
^@d^@e^@f^@a^@u^@l^@t^@ 2$
^@o^@u^@t^@^I2$
^@p^@r^@o^@j^@e^@c^@t^@^I1$
^@t^@a^@s^@k^@^I1$
^@w^@i^@n^@d^@o^@w^@s^@^I1$
^@y^@o^@u^@r^@^I1$

^@ ^Iand の意味は何$ですか?ない^Iわけ\t?私$はそれが行の終わりを意味することを知っていますが、それはエンターキーを意味します\nか?もしそうなら、viの '$'と '^ M'の違いは何ですか?

回答:


3

$は、オプションの:set listデフォルト値で表示される行末ですlistchar^Iタブ文字です。

^@あるnull文字が。

奇妙な理由で、ファイル内のすべての意味のある文字の前に、null数字と(おそらく)スペースを除く文字が追加されます。

これはVi(m)の問題ではありませんnull。これらのs なしでデータを出力する方法があるかどうか、そのメソッドのドキュメントを確認してください。


1

開いたファイルは、Javaの標準であるUTF-16またはUCS-2エンコードです。vi(実際のようにvivimシンボリックリンクされていませんvi)ASCII(またはISO-8859-1?)テキストのみを処理できます。を使用するvimか、ファイルをASCIIに変換します(例:)iconv -f utf-16 -t ascii <input> <output>


0

viコマンドの背後にVimがある場合、次のコマンドでファイルをリロードできます。

:edit ++enc=ucs-2

または、エンコードを直接指定します

$ vim ++enc=ucs-2 filename

または、これらのファイルを頻繁に開く必要がある場合はucs-2'fileencodings'オプションなどを先頭に追加します~/.vimrc


vimはエンコードを自動的に検出すべきではありませんか?それとも、BOMがあるときにのみそれを行いますか?
ピロナ

@pilona:検出されるものは'fileencodings'、私が言及したオプションによって制御されます。
インゴカルカット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.