web-dev-qa-db-ja.com

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

MapReduceでContext.write(k、v)を使用して(Javaを使用して)データをファイルに書き込もうとすると、ファイルに次の内容が見つかります(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$

^@^I$の意味は何ですか? ^I\tを意味しますか? $は行の終わりを意味しますが、\nと同じように、Enterキーを意味しますか?もしそうなら、viの「$」と「^ M」の違いは何ですか?

4
Searene

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

^@null文字です。

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

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

3
romainl

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

1
pilona

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

:edit ++enc=ucs-2

または直接エンコーディングを指定します

$ vim ++enc=ucs-2 filename

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

0
Ingo Karkat