Что означает ^@, ^I и $ в vi?
Когда я пытаюсь использовать Context.write(k,v) в MapReduce(используя 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
? Если так, в чем разница между '$' и '^M' в vi?
3 ответа
$
конец строки, отображаемый :set list
со значением по умолчанию listchar
вариант. ^I
является символом табуляции.
^@
это null
персонаж.
По какой-то странной причине каждый значащий символ в вашем файле начинается с null
символ кроме цифр и (возможно) пробелов.
Это не проблема Vi(m): посмотрите документацию этого метода, чтобы узнать, есть ли способ вывести ваши данные без них. null
s.
Файл, который вы открыли, имеет кодировку UTF-16 или UCS-2, что является стандартом в Java. vi
(как в реале vi
не vim
символическая ссылка на vi
) может обрабатывать только текст ASCII (или ISO-8859-1?). использование vim
или преобразовать файл в ASCII (например, iconv -f utf-16 -t ascii <input> <output>
).
Если это Вим за тобой vi
команда, вы можете перезагрузить файл с
:edit ++enc=ucs-2
или напрямую указать кодировку
$ vim ++enc=ucs-2 filename
или, если вам нужно часто открывать эти файлы, ucs-2
к 'fileencodings'
вариант, например, в вашем ~/.vimrc
,