Предположим, у нас есть два текстовых документа:
- Наш первый файл содержит «
hi
» в качестве текста. - Наш второй файл содержит «
hi
» в качестве текста.
Когда мы открываем эти два файла в gedit, vi или vim, эти два файла визуально идентичны во всех отношениях.
Однако, когда мы запускаем xxd
для файлов, мы получаем следующее:
- Шестнадцатеричный код нашего первого файла:
6869
- Шестнадцатеричный код нашего второго файла:
6869 0a
Ага! Есть невидимая новая строка. В vim, если бы мы уделили достаточно внимания строке состояния и поняли, что означает [noeol]
, то мы могли бы понять это, но в gedit два файла открываются точно так же!
В небольшом опросе, когда я просил людей различать два файла, используя только gedit или vim, они не справились в 100% случаев. Когда я попросил их выполнить ту же задачу с помощью leafpad или emacs, они добились успеха в 100% случаев.
Я понимаю, что vi и gedit хотят добавлять новую строку в каждый создаваемый ими файл (и я признаю, что в этом, вероятно, есть преимущества). Чего я не понимаю, так это почему gedit и vim считают, что визуально скрывать эту новую строку от своих пользователей полезно? Особенно, когда такое поведение потенциально чрезвычайно разрушительно...
(Возьмем, к примеру, двух C-программистов, которые видят содержимое этих двух файлов одинаковым в своем текстовом редакторе vi/gedit, а затем, предполагая, что видят то, что получают, продолжают записывать содержимое в массив
char greeting[2]
. первый программист, пишущий первый файл, хотя и немного неряшливый со своим кодом, идет к славе и богатству, но второй программист, пишущий второй файл, умирает в нищете, сбитый с толку и сбитый с толку этим невидимым (и предотвратимым) стеком переполнение.)
Итак, скажите, пожалуйста, в чем преимущества текстовых редакторов, таких как vim и gedit, которые добавляют невидимые новые строки в конце каждого документа, который они создают, а затем продолжают скрывать эти новые строки от пользователя, так что истинное содержимое этих файлов только видимо обнаруживаются с помощью других текстовых редакторов?