Подтвердить что ты не робот

Почему gedit и vim скрывают окончательную новость от пользователя?

Предположим, что у нас есть два текстовых документа:

  • Наш первый файл содержит "hi" в качестве текста.
  • Наш второй файл содержит "hi" в качестве текста.

Когда мы открываем эти два файла в gedit, vi или vim, эти два файла визуально идентичны во всех отношениях.

Однако, когда мы запускаем xxd в файлах, мы получаем следующее:

  • Содержимое шестнадцатеричного файла нашего первого файла: 6869
  • Содержимое шестнадцатеричного кода нашего второго файла: 6869 0a

Ага! Там невидимая новая линия. В vim, если мы уделяем достаточно пристальное внимание строке состояния и понимаем, что означает [noeol], тогда мы можем подобрать это, но в gedit оба файла открываются точно так же!

В небольшом опросе, когда я попросил людей различать два файла, используя только gedit или vim, они потерпели неудачу в течение 100% времени. Когда я попросил их выполнить ту же задачу, используя листовую панель или emacs, они преуспели в 100% случаев.

Я понимаю, что vi и gedit хотят добавить новую строку для каждого создаваемого файла (и я признаю, что, вероятно, есть преимущества для этого). Я не понимаю, почему gedit и vim считают визуальное скрытие этой новой строки от своих пользователей полезной? Особенно, когда такое поведение потенциально чрезвычайно разрушительно...

(Возьмем, к примеру, двух C-программистов, которые видят содержимое этих двух файлов одинаково в своем текстовом редакторе vi/gedit, а затем, предполагая, что они видят, они получают, продолжайте писать содержимое в массив char greeting[2]. Первый программист, записывающий первый файл, хотя и немного неряшливый с его кодом, продолжает славу и удачу, но второй программист, пишущий второй файл, умирает в нищете, смущен и недоуменен этим невидимым (и предотвратимым ) переполнение стека.)

Итак, молитесь, каковы преимущества того, чтобы текстовые редакторы, такие как vim и gedit, добавляли невидимые строки в конце каждого создаваемого ими документа, а затем продолжайте скрывать эти новые строки от пользователя, так что истинное содержимое этих файлов заметны только с помощью других текстовых редакторов?

4b9b3361

Ответ 1

То, что вы воспринимаете последнюю строку как "визуально скрытую", проистекает из противоположных точек зрения.

Многие люди (особенно с фоном Unix) утверждают, что текстовые файлы всегда должны заканчиваться новой строкой (например, см. Почему текстовые файлы заканчиваются новой строкой?) и что любой текстовый редактор, который позволяет создавать файлы без него, принципиально нарушен. С этой точки зрения, что в Vim нет дополнительной пустой строки, она согласуется только с этим мировоззрением. Файл появляется в редакторе, как если бы он был cat ed в терминале.

С точки зрения Vim, файл с отсутствующей новой строкой является еретическим и дефектным; почему он указан с сообщением [noeol] при загрузке (и довольно сложно отредактировать файл, сохраняя недостающую новую строку, хотя я написал PreserveNoEOL плагин, чтобы помочь с этим).

Ответ 2

Я считаю, что это соглашение, которое переносится из vi. Одно из преимуществ этого заключается в том, что при конкатенации файлов вы все равно можете различать, где заканчивался каждый файл.

В этом потоке в списке рассылки vim_use представлен еще один контекст