- Почему важно всегда ставить символ переноса строки в конце текстовых файлов?
- Что такое символ переноса строки?
- Почему перенос строки в конце файла важен?
- Ещё доводы:
- Настраиваем редактор
- Заключение
- Есть ли специальный символ для перехода на новую строку?
- Перенос строки в текстовых файлах — какие бывают варианты. Что такое каретка. Обозначения символов. Разные операционные системы
- Primary tabs
- Forums:
- Что такое каретка
- Какие символы используются
- Какие есть варианты использования
- Перевод строки
- Содержание
- Терминология
- В ASCII
- В Юникоде
- Трудности
- Разница представлений
- Последняя строка
- История
- Конец строки
- Абзац
- См. также
- Напишите отзыв о статье «Перевод строки»
- Примечания
- Ссылки
- Отрывок, характеризующий Перевод строки
Почему важно всегда ставить символ переноса строки в конце текстовых файлов?
Иногда при просмотре диффов коммитов через git log или git diff можно заметить следующий вывод:
Или на GitHub в интерфейсе для просмотра диффов:
Почему это так важно, что Git и GitHub предупреждают нас об этом? Давайте разберемся.
Что такое символ переноса строки?
Что может быть проще, чем текстовый файл? Просто текстовые данные — как хранятся на диске, так и отображаются. На самом деле правительство нам врёт всё немного сложнее.
Оффтопик про управляющие символы ASCII
Не все символы, которые содержатся в текстовых файлах, имеют визуальное представление. Такие символы ещё называют «управляющими», и к ним относятся, например:
- нулевой символ ( x00 , \0 ) — часто используется для кодирования конца строки в памяти; т.е. программа считывает символы из памяти по одному до тех пор, пока не встретит нулевой символ, и тогда строка считается завершённой;
- табуляция ( \x09 , \t ) — используется для выравнивания данных по границе столбца, так что это выглядит как таблица;
- перевод строки ( \x0a , \n ) — используется для разделения текстовых данных на отдельные строки;
- возврат каретки ( \x0d , \r ) — переместить курсор в начало строки;
- возврат на один символ ( \x08 , \b ) — переместить курсор на один символ назад;
- звонок ( \x07 , \a ) — если набрать этот символ в терминале, то будет бибикающий символ; именно так консольные программы, типа vim , бибикают на пользователей;
- и другие.
Многие эти символы пришли к нам из эпохи печатных машинок, поэтому у них такие странные названия. И действительно, в контексте печатной машинки или принтера такие операции, как перевод строки (сместить лист бумаги вверх так, чтобы печатающая головка попала на следующую строку), возврат каретки (переместить печатающую головку в крайнее левое положение) и возврат на один символ назад, обретают смысл. При помощи возврата на один символ назад создавались жирные символы (печатаешь символ, возвращаешься назад и печатаешь его ещё раз) и буквы с диакритическими знаками, такие как à или ã (печатаешь символ, возвращаешься назад и печатаешь апостроф или тильду). Но зачем печатной машинке бибикалка?
Сегодня многие из этих символов потеряли смысл, но некоторые до сих пор выполняют функцию, схожую с исходной.
Текстовые редакторы отображают текстовые файлы в некоем адаптированном виде, преобразуя непечатаемые символы, например, переносы строк и табуляции преобразуются в настоящие отдельные строки или выравнивающие отступы.
Для набора символа переноса строки достаточно нажать клавишу «Enter», но на разных платформах этот символ закодируется по-разному:
- в Unix-совместимых системах (включая современные версии macOS) используется один символ перевода строки ( LF );
- в Windows используется сразу два символа — возврат каретки ( CR ) и перевод строки ( LF );
- в очень старых версиях Mac OS (до 2001 года) использовался один символ CR .
Как видите, Windows точнее всего эмулирует поведение печатной машинки.
В языках программирования символ новой строки часто кодируют при помощи бэкслэш-последовательностей, таких как \n или \r\n . Нужно понимать разницу между такой последовательностью и настоящим символом переноса строки. Если в редакторе в файле *.txt просто набрать \n и сохранить, то вы получите ровно то, что написали. Символом переноса строки оно не станет. Нужно что-то, что заменит эти бэкслэш-последовательности на настоящие символы переноса строки (например, компилятор или интерпретатор языка программирования).
Почему перенос строки в конце файла важен?
Согласно определению из стандарта POSIX, который тоже пришёл к нам из эпохи печатных машинок:
Строка — это последовательность из нуля или более символов, не являющихся символом новой строки, и терминирующего символа новой строки.
Почему важен этот стандарт? Возможен миллиард способов реализовать одно и то же, и только благодаря стандартам, таким как POSIX, мы имеем сейчас огромное количество качественного ПО, которое не конфликтует друг с другом.
Т.е. если вы не ставите символ переноса строки в конце строки, то формально по стандарту такая строка не является валидной. Множество утилит из Unix, которыми я пользуюсь каждый день, написано в согласии с этим стандартом, и они просто не могут правильно обрабатывать такие «сломанные» строки.
Давайте, например, через Python создадим такой файл со сломанными строками:
Сколько по-вашему в этом файле строк? Три? Давайте посмотрим, что об этом файле думает утилита wc , которая с флагом -l умеет считать количество строк в файле:
Упс! wc нашла только 2 строки!
Давайте создадим еще один файл:
И попробуем теперь склеить два созданных файла при помощи утилиты cat :
Название cat — это сокращение от «конкатенация», и никак не связано с котиками. А жаль.
И опять какой-то странный результат! В большинстве случаев это не то, чего вы бы ожидали, но вполне возможны ситуации, когда вам нужен именно такой результат. Именно поэтому утилита cat не может самостоятельно вставлять отсутствующие символы переноса строки, иначе это сделало бы её поведение неконсистентным.
Это только пара примеров, но многие другие утилиты, которые работают с текстом (например, diff , grep , sed ), имеют такие же проблемы. Собственно говоря, это даже не проблемы, а их задокументированное поведение.
Ещё доводы:
- при дозаписи содержимого в конец файла без переноса строки получится некрасивый дифф — будет изменена последняя строка (хотя на ней всего лишь добавился символ переноса);
- файл с переносом строки и без переноса строки — это два разных файла; для diff и git diff единственный способ отобразить разницу между ними — это напечатать сообщение об отсутствии символа переноса строки;
- согласно стандарту языка C (до 2014 года), непустые файлы с исходным кодом должны заканчиваться символом переноса строки.
Настраиваем редактор
Самый простой способ перестать думать о пустых строках и начать жить — это настроить свой текстовый редактор или IDE на автоматическое добавление символа переноса строки в конец файлов:
- PyCharm и другие IDE JetBrains: Settings > Editor > General > Ensure an empty line at the end of a file on Save ;
- VS Code: «files.insertFinalNewline»: true .
Для других редакторов смотрите настройку здесь.
Кстати, если вы пользуетесь форматтером black , то у меня хорошие новости — он всегда добавляет перенос строки в конец всех файлов *.py .
Заключение
Возможно, такая маленькая деталь, как перенос строки в конце файла и не кажется очень важной, а тема вообще кажется спорной, но боюсь, что у нас нет другого выбора, кроме как принять это правило за данность и просто выработать привычку (или настроить инструментарий) всегда ставить символ новой строки в любых текстовых файлах, даже если этого не требуется явно. Это считается распространённой хорошей практикой, и как минимум убережёт вас и ваших коллег от всяких неожиданных эффектов при работе с утилитами Unix.
В текстовом редакторе это выглядит как лишняя пустая строка в конце файла:
Есть ли специальный символ для перехода на новую строку?
Как сделать запись в файл без перехода на новую строку?
Имеется код: set /P asd= i.dat Ну по коду ясно что он открывает файл и в.
Не считывается символ перехода на новую строку
Здравствуйте, такой вопрос. Я создал форму. Ввожу в нее текст, отправляю запрос, все работает.
Символ перехода на новую строку в калькуляторе Страуструпа
Выполняю задание в книге «Программирование Принципы и практика с использованием с++» В главе 7.
Сочетания клавиш для перехода на новую строку
Извиняюсь сразу за тему , перенесите пожалуйста куда надо. Суть такая, много на видео видел по.
Добавлено через 3 минуты
К примеру есть специальные знаки @#$%^&* у каждого свои предназначение
а есть ли знак который делает перенос строки на следующую стоку
пример
echo Копарация Microsoft [Знак переноса] 1991-2010
итог
Копарация Microsoft
1991-2010
вопрос есть ли такой спец знак ?
Esc + 13 или 14 ?
чтото я не понял
ALT + 13 =♪
ALT + 14 =♫
Часть сообщений перенёс в новый тред «Сымитировать нажатие клавиши ENTER».
Такого специального символа в синтаксисе языка командной строки и пакетных файлов нет.
Но есть команда, которая осуществляет переход на новую строку.
Эта команда — команда ECHO. (в классическом варианте в конце именно точка, но можно использовать и некоторые другие символы):
Для записи в коде выводимого текста в одну строку можно создать и своё сочетание символов для перехода на новую строку в виде расширения какой-нибудь переменной, например %n% , предварительно задав эту переменную:
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Выделить в отдельную строку все слова, где встречается хотя бы один специальный символ из заданного перечня
Люди Хелп. оч срочно надо написать программу. А как я не могу понять вообще как это реализовать.
Игнорирование перехода на новую строку
Добрый день! Использую VS’2013. Консольное приложение Win32. Возникла необходимость в консоли.
cin без перехода на новую строку
Как сделать, чтобы после считывания cin курсор не переводился на новую строку, а оставался на.
Размер символа перехода на новую строку
Программа записывает в файл, а потом читает структуру такого типа: // размеры в файле.
Перенос строки в текстовых файлах — какие бывают варианты. Что такое каретка. Обозначения символов. Разные операционные системы
Primary tabs
Forums:
Что такое каретка
Под кареткой можно подразумевать курсор (метку), который перемещается по экрану, когда мы набираем текстовй файлы.
Какие символы используются
Для переноса строки могут в общем случае использоваться два символа:
- Переноса строки (= «Перенос каретки«)
Обозначают символами: - Возврата строки (= «Возврат каретки«)
Обозначают символами:
Какие есть варианты использования
- Всё наиболее «логично» в Windows (и ряде других систем) — здесь в качестве переноса строки программы обычно используют последовательность:
— то есть сначала мы сначала возвращаем курсор в начало строки, а потом уже переносим его на новую строчку, так что он оказывается на новой строке в крайне левом положении. (Ведь по сути именно так представляется работа клавиши Энтер при наборе текста)
LF
CR
Перевод строки
Перевод строки, или разрыв строки — продолжение печати текста с новой строки, то есть с левого края на строку ниже, или уже на следующей странице. На компьютерах это осуществляется клавишей ввода Enter.
Разделителем строк, обозначающим место перевода строки, в текстовых данных служит один или пара управляющих символов, а в размеченном тексте также — определённый тег (в HTML — тег
, от англ. break — «разрыв»). Разделитель строк также называют просто переводом строки, когда нет надобности их различать.
Вместе с другими действиями перевод строки выполняется также перед следующим абзацем или страницей.
Содержание
Терминология
Перевод строки сокращают как NEL (от англ. next line — «со следующей строки, переход на следующую строку», или newline — «с новой строки, переход на новую строку»).
Возврат каретки (англ. carriage return , CR) — управляющий символ ASCII (0x0D, 1310, ‘\r’), при выводе которого курсор перемещается к левому краю поля, не переходя на другую строку. Этот управляющий символ вводится клавишей «Enter». Будучи записан в файле, в отдельности рассматривается как перевод строки только в системах Macintosh.
Подача строки (от англ. line feed , LF — «подача [бумаги] на строку») — управляющий символ ASCII (0x0A, 10 в десятичной системе счисления, ‘\n’), при выводе которого курсор перемещается на следующую строку. В случае принтера это означает сдвиг бумаги вверх, в случае дисплея — сдвиг курсора вниз, если ещё осталось место, и прокрутку текста вверх, если курсор находился на нижней строке. Возвращается ли при этом курсор к левому краю или нет, зависит от реализации.
Таким образом, вывод последовательности CR+LF в семантике терминала гарантирует действие «создание новой строки».
Терминалы (и их эмуляторы) могут также проводить различные преобразования символов (например, LF → CR+LF, CR → CR+LF) при вводе и выводе текста.
Жёсткий возврат, иногда аппаратный возврат — разделитель строк, поставленный пользователем. В машинном представлении текста жёсткий возврат явно выражен, обычно управляющими символами или тегом.
Мягкий возврат — перевод строки, выполненный текстовым процессором в том месте текста, которое им выбрано. Мягкий возврат разделяет строки текста в его визуальном (видимом пользователем) представлении, но может быть никак не выражен в машинном представлении этого текста.
В ASCII
Системы, основанные на ASCII или совместимом наборе символов, используют или LF (перевод строки, 0x0A), или CR (возврат каретки, 0x0D) по отдельности, или последовательность CR+LF; см. ниже историческую причину для соглашения CR+LF. Эти названия основаны на командах принтера: перевод строки означает, что одна строка на бумаге должна быть перенесена при печати, а возврат каретки означает, что каретка печатающего устройства должна вернуться к началу текущей строки.
В Юникоде
По стандарту, любое совместимое с Юникодом приложение должно воспринимать как перевод строки каждый из нижеследующих символов:
- LF (U+000A): англ.line feed — подача строки;
- CR (U+000D): англ.carriage return — возврат каретки;
- NEL (U+0085): англ.next line — переход на следующую строку;
- LS (U+2028): англ.line separator — разделитель строк;
- PS (U+2029): англ.paragraph separator — разделитель абзацев.
Последовательность CR+LF (U+000D U+000A) надлежит воспринимать как один перевод строки, а не два [1] .
Трудности
Нет общепринятых сокращений русских терминов. ВК (Возврат Каретки) совпадает по написанию с сокращением от англ. BreaK («разрыв [строки]», — то же, что перевод строки), а ПС не различает Подачу Строки и Перевод Строки.
Разница представлений
Отсутствие единого общепринятого представления перевода строки в разных операционных системах осложняет обмен текстовыми данными между ними. Юникод старается примирить эту разницу, уравнивая CR, LF и CR+LF, однако вступает в противоречие с наследуемым им ASCII при трактовке последовательности LF+CR, не предварённой CR: согласно ASCII это один перевод строки, а согласно Юникоду — два.
Перевод строки при вводе с клавиатуры представлен единообразно во всех системах — символом CR, и в системах с другим представлением перевода строки текстовые данные приходится перекодировать в необходимый формат.
Последняя строка
Даже в современных изданиях ОС UNIX и Linux отсутствие перевода строки в конце системных конфигурационных файлов приводит к тому, что последняя строка не учитывается [2] , а казалось бы правильно составленный файл не работает, представляясь головоломкой для пользователя, не предупреждённого об этой самобытной особенности. См. раздел Конец строки.
История
На перфокартных системах хранения данных одна строка записывалась на одну перфокарту, поэтому строка была заданной длины, по количеству колонок (обычно 80). Строки короче добивались пробелами, а строки длиннее обрезались. Разделителя строк не было, а неявный перевод строки предполагался через каждые 80 символов. Некоторые ранние мейнфреймовые операционные системы переняли это для хранения текста в файлах, где уже не было естественного ограничения на длину строки.
На механических пишущих машинках был рычаг, который возвращал каретку к левому краю страницы и прокручивал вал, подвигая бумагу вверх на строку. На телетайпах и более поздних алфавитно-цифровых печатающих устройствах (АЦПУ) вместо каретки была головка, в лазерных принтерах она перестала быть материальной, но в термине возврат каретки всё это продолжали называть кареткой, чтобы его не менять. На телетайпах возврат каретки и подачу строки разделили, откуда традиция представления перевода строки как CR+LF перешла и к текстовым файлам.
Конец строки
Телетайпы сначала печатали на рулонной бумаге, и сообщения начинали и заканчивали переводом строки, чтобы каждое начиналось с новой строки наверняка. Отсюда пошёл обычай включать разделитель сообщений в состав самого сообщения.
На компьютерах появился диалоговый режим работы, когда поочерёдно печатались вводимые управляющие сообщения пользователя и ответные программные сообщения. Пользователь после сообщения всегда переводил строку, так как одновременно это означало команду к исполнению, а вот программы после своего сообщения строку иногда не переводили, несмотря на предписание. Устройство вывода изначально не было приспособлено к тому, чтобы терминал мог следить за переводами строк, и реализовать это было трудно, поэтому чтобы ввод пользователя начинался с новой строки наверняка, управляющий диалогом терминал после программного сообщения переводил строку тоже. Помещать перевод строки предписывалось и в конце текстового файла.
Забота о разделении сообщений легла на терминал, и думать об этом перестали, а перевод строки в конце текста переосмыслился как конец последней строки, вместе с чем как концы строк переосмыслились и вообще все переводы строк, чему способствовало удобство работы с регулярно завершёнными строками с точки зрения программирования, сродни нуль-терминированным строкам. Так обычай включать разделитель сообщений в состав сообщения перешёл в обычай включать разделитель строк в состав строки.
Лишняя строка в конце файла обычно не представляет хлопот, поэтому перевод строки до сих пор называют концом строки, а разделитель строк — символом конца строки (EOL, англ. end of line ).
Перетекание разделителя в завершитель и обратно бывает не только у перевода строки. Так, точка с запятой в языке Си команды завершает, а в Паскале их разделяет. В письменной речи после нескольких предложений точку почти всегда ставят, а после одиночного — чаще нет. Это колебание хорошо видно в списках, где одиночные предложения иногда начинают с большой буквы, а иногда — с маленькой.
Абзац
На телетайпах, а потом и в первых редакторах разделение текста на абзацы не имело своего особого представления, для этого использовали пустые строки или отступ из нескольких пробелов, а переводы строки внутри абзаца проставляли вручную.
Позже в редакторах появился автоматический перенос, выполняемый на лету при отрисовке текста каждый раз заново. Для отличения от ручного его назвали мягким возвратом, а ручной — жёстким (перенос называли и просто возвратом, см. раздел Разница представлений). Разделитель строк при этом переносил как раньше, но приобрёл смысл ещё и разделителя абзацев — для тех строк, в которых срабатывал автоперенос и которые становились при этом абзацами. Включатель такого режима назвали переносом по словам (англ. word wrap ). При автопереносе ручной перенос разрывал абзац, межабзацный интервал делался как раньше (в новых терминах — перемежением пустым абзацем), но основное качество абзаца — независимость от разбиения на строки — было достигнуто.
Режим автопереноса включался и выключался пользователем вручную, определить это программно было трудно, то есть, избавившись от ручного переноса, получили другую ручную операцию. Стало понятно, что не обойтись без более автоматизирующего разнесения разделителя строк и разделителя абзацев, то есть для них понадобились два разных символа.
Чтобы не заботиться о совместимости с уже существующим в ASCII разделителем строк/абзацев, разработчики не стали использовать символы ASCII для разделителя строк и разделителя абзацев. В HTML использовали теги
и
, в Юникоде — символы U+2028 и U+2029, соответственно. В Википедии абзацы можно разделять пустыми строками, отображаемыми при этом полноценным интервалом.
См. также
Напишите отзыв о статье «Перевод строки»
Примечания
- ↑ [www.unicode.org/reports/tr14/tr14-22.html#BreakingRules Unicode Standard Annex #14: Unicode Line Breaking Algorithm] (англ.)
- ↑ [www.google.ru/search?q=missing+final+newline Поисковый запрос missing final newline]
Ссылки
- Параграф 8 (Newline Guidelines) [www.unicode.org/versions/Unicode5.2.0/ch05.pdf главы 5] (Implementation Guidelines) [www.unicode.org/versions/Unicode5.2.0/ стандарта Юникода версии 5.2.0] (англ.)
- [www.w3.org/TR/newline The [NEL] Newline Character] (англ.) — заметка W3C
- Xavier Noria. [onlamp.com/pub/a/onlamp/2006/08/17/understanding-newlines.html Understanding Newlines] (англ.)
- [www.rfc-editor.org/old/EOLstory.txt The End-of-Line Story] (англ.)
- [www.oualline.com/eol.html The End of Line Puzzle] (англ.)
- [www.thefreecountry.com/tofrodos/ Tofrodos] (англ.) — свободная программа для преобразования переводов строк в файлах в ASCII-кодировке между форматами MS-DOS/Windows и UNIX
- [sysd.org/stas/node/34 ToFroWin] (англ.) — расширение Проводника Windows для преобразования переводов строк между форматами MS-DOS/Windows и UNIX; представляет собой GUI-версию для Windows программы [www.thefreecountry.com/tofrodos/ Tofrodos]
Отрывок, характеризующий Перевод строки
В этот день Пьер, для того чтобы развлечься, поехал в село Воронцово смотреть большой воздушный шар, который строился Леппихом для погибели врага, и пробный шар, который должен был быть пущен завтра. Шар этот был еще не готов; но, как узнал Пьер, он строился по желанию государя. Государь писал графу Растопчину об этом шаре следующее:
«Aussitot que Leppich sera pret, composez lui un equipage pour sa nacelle d’hommes surs et intelligents et depechez un courrier au general Koutousoff pour l’en prevenir. Je l’ai instruit de la chose.
Recommandez, je vous prie, a Leppich d’etre bien attentif sur l’endroit ou il descendra la premiere fois, pour ne pas se tromper et ne pas tomber dans les mains de l’ennemi. Il est indispensable qu’il combine ses mouvements avec le general en chef».
[Только что Леппих будет готов, составьте экипаж для его лодки из верных и умных людей и пошлите курьера к генералу Кутузову, чтобы предупредить его.
Я сообщил ему об этом. Внушите, пожалуйста, Леппиху, чтобы он обратил хорошенько внимание на то место, где он спустится в первый раз, чтобы не ошибиться и не попасть в руки врага. Необходимо, чтоб он соображал свои движения с движениями главнокомандующего.]
Возвращаясь домой из Воронцова и проезжая по Болотной площади, Пьер увидал толпу у Лобного места, остановился и слез с дрожек. Это была экзекуция французского повара, обвиненного в шпионстве. Экзекуция только что кончилась, и палач отвязывал от кобылы жалостно стонавшего толстого человека с рыжими бакенбардами, в синих чулках и зеленом камзоле. Другой преступник, худенький и бледный, стоял тут же. Оба, судя по лицам, были французы. С испуганно болезненным видом, подобным тому, который имел худой француз, Пьер протолкался сквозь толпу.
– Что это? Кто? За что? – спрашивал он. Но вниманье толпы – чиновников, мещан, купцов, мужиков, женщин в салопах и шубках – так было жадно сосредоточено на то, что происходило на Лобном месте, что никто не отвечал ему. Толстый человек поднялся, нахмурившись, пожал плечами и, очевидно, желая выразить твердость, стал, не глядя вокруг себя, надевать камзол; но вдруг губы его задрожали, и он заплакал, сам сердясь на себя, как плачут взрослые сангвинические люди. Толпа громко заговорила, как показалось Пьеру, – для того, чтобы заглушить в самой себе чувство жалости.
– Повар чей то княжеский…
– Что, мусью, видно, русский соус кисел французу пришелся… оскомину набил, – сказал сморщенный приказный, стоявший подле Пьера, в то время как француз заплакал. Приказный оглянулся вокруг себя, видимо, ожидая оценки своей шутки. Некоторые засмеялись, некоторые испуганно продолжали смотреть на палача, который раздевал другого.
Пьер засопел носом, сморщился и, быстро повернувшись, пошел назад к дрожкам, не переставая что то бормотать про себя в то время, как он шел и садился. В продолжение дороги он несколько раз вздрагивал и вскрикивал так громко, что кучер спрашивал его:
– Что прикажете?
– Куда ж ты едешь? – крикнул Пьер на кучера, выезжавшего на Лубянку.
– К главнокомандующему приказали, – отвечал кучер.
– Дурак! скотина! – закричал Пьер, что редко с ним случалось, ругая своего кучера. – Домой я велел; и скорее ступай, болван. Еще нынче надо выехать, – про себя проговорил Пьер.
Пьер при виде наказанного француза и толпы, окружавшей Лобное место, так окончательно решил, что не может долее оставаться в Москве и едет нынче же в армию, что ему казалось, что он или сказал об этом кучеру, или что кучер сам должен был знать это.
Приехав домой, Пьер отдал приказание своему все знающему, все умеющему, известному всей Москве кучеру Евстафьевичу о том, что он в ночь едет в Можайск к войску и чтобы туда были высланы его верховые лошади. Все это не могло быть сделано в тот же день, и потому, по представлению Евстафьевича, Пьер должен был отложить свой отъезд до другого дня, с тем чтобы дать время подставам выехать на дорогу.
24 го числа прояснело после дурной погоды, и в этот день после обеда Пьер выехал из Москвы. Ночью, переменя лошадей в Перхушкове, Пьер узнал, что в этот вечер было большое сражение. Рассказывали, что здесь, в Перхушкове, земля дрожала от выстрелов. На вопросы Пьера о том, кто победил, никто не мог дать ему ответа. (Это было сражение 24 го числа при Шевардине.) На рассвете Пьер подъезжал к Можайску.
Все дома Можайска были заняты постоем войск, и на постоялом дворе, на котором Пьера встретили его берейтор и кучер, в горницах не было места: все было полно офицерами.
В Можайске и за Можайском везде стояли и шли войска. Казаки, пешие, конные солдаты, фуры, ящики, пушки виднелись со всех сторон. Пьер торопился скорее ехать вперед, и чем дальше он отъезжал от Москвы и чем глубже погружался в это море войск, тем больше им овладевала тревога беспокойства и не испытанное еще им новое радостное чувство. Это было чувство, подобное тому, которое он испытывал и в Слободском дворце во время приезда государя, – чувство необходимости предпринять что то и пожертвовать чем то. Он испытывал теперь приятное чувство сознания того, что все то, что составляет счастье людей, удобства жизни, богатство, даже самая жизнь, есть вздор, который приятно откинуть в сравнении с чем то… С чем, Пьер не мог себе дать отчета, да и ее старался уяснить себе, для кого и для чего он находит особенную прелесть пожертвовать всем. Его не занимало то, для чего он хочет жертвовать, но самое жертвование составляло для него новое радостное чувство.
24 го было сражение при Шевардинском редуте, 25 го не было пущено ни одного выстрела ни с той, ни с другой стороны, 26 го произошло Бородинское сражение.
Для чего и как были даны и приняты сражения при Шевардине и при Бородине? Для чего было дано Бородинское сражение? Ни для французов, ни для русских оно не имело ни малейшего смысла. Результатом ближайшим было и должно было быть – для русских то, что мы приблизились к погибели Москвы (чего мы боялись больше всего в мире), а для французов то, что они приблизились к погибели всей армии (чего они тоже боялись больше всего в мире). Результат этот был тогда же совершении очевиден, а между тем Наполеон дал, а Кутузов принял это сражение.
Ежели бы полководцы руководились разумными причинами, казалось, как ясно должно было быть для Наполеона, что, зайдя за две тысячи верст и принимая сражение с вероятной случайностью потери четверти армии, он шел на верную погибель; и столь же ясно бы должно было казаться Кутузову, что, принимая сражение и тоже рискуя потерять четверть армии, он наверное теряет Москву. Для Кутузова это было математически ясно, как ясно то, что ежели в шашках у меня меньше одной шашкой и я буду меняться, я наверное проиграю и потому не должен меняться.
Когда у противника шестнадцать шашек, а у меня четырнадцать, то я только на одну восьмую слабее его; а когда я поменяюсь тринадцатью шашками, то он будет втрое сильнее меня.
До Бородинского сражения наши силы приблизительно относились к французским как пять к шести, а после сражения как один к двум, то есть до сражения сто тысяч; ста двадцати, а после сражения пятьдесят к ста. А вместе с тем умный и опытный Кутузов принял сражение. Наполеон же, гениальный полководец, как его называют, дал сражение, теряя четверть армии и еще более растягивая свою линию. Ежели скажут, что, заняв Москву, он думал, как занятием Вены, кончить кампанию, то против этого есть много доказательств. Сами историки Наполеона рассказывают, что еще от Смоленска он хотел остановиться, знал опасность своего растянутого положения знал, что занятие Москвы не будет концом кампании, потому что от Смоленска он видел, в каком положении оставлялись ему русские города, и не получал ни одного ответа на свои неоднократные заявления о желании вести переговоры.
Давая и принимая Бородинское сражение, Кутузов и Наполеон поступили непроизвольно и бессмысленно. А историки под совершившиеся факты уже потом подвели хитросплетенные доказательства предвидения и гениальности полководцев, которые из всех непроизвольных орудий мировых событий были самыми рабскими и непроизвольными деятелями.
Древние оставили нам образцы героических поэм, в которых герои составляют весь интерес истории, и мы все еще не можем привыкнуть к тому, что для нашего человеческого времени история такого рода не имеет смысла.
На другой вопрос: как даны были Бородинское и предшествующее ему Шевардинское сражения – существует точно так же весьма определенное и всем известное, совершенно ложное представление. Все историки описывают дело следующим образом:
Русская армия будто бы в отступлении своем от Смоленска отыскивала себе наилучшую позицию для генерального сражения, и таковая позиция была найдена будто бы у Бородина.
Русские будто бы укрепили вперед эту позицию, влево от дороги (из Москвы в Смоленск), под прямым почти углом к ней, от Бородина к Утице, на том самом месте, где произошло сражение.
Впереди этой позиции будто бы был выставлен для наблюдения за неприятелем укрепленный передовой пост на Шевардинском кургане. 24 го будто бы Наполеон атаковал передовой пост и взял его; 26 го же атаковал всю русскую армию, стоявшую на позиции на Бородинском поле.
Так говорится в историях, и все это совершенно несправедливо, в чем легко убедится всякий, кто захочет вникнуть в сущность дела.
Русские не отыскивали лучшей позиции; а, напротив, в отступлении своем прошли много позиций, которые были лучше Бородинской. Они не остановились ни на одной из этих позиций: и потому, что Кутузов не хотел принять позицию, избранную не им, и потому, что требованье народного сражения еще недостаточно сильно высказалось, и потому, что не подошел еще Милорадович с ополчением, и еще по другим причинам, которые неисчислимы. Факт тот – что прежние позиции были сильнее и что Бородинская позиция (та, на которой дано сражение) не только не сильна, но вовсе не есть почему нибудь позиция более, чем всякое другое место в Российской империи, на которое, гадая, указать бы булавкой на карте.
Русские не только не укрепляли позицию Бородинского поля влево под прямым углом от дороги (то есть места, на котором произошло сражение), но и никогда до 25 го августа 1812 года не думали о том, чтобы сражение могло произойти на этом месте. Этому служит доказательством, во первых, то, что не только 25 го не было на этом месте укреплений, но что, начатые 25 го числа, они не были кончены и 26 го; во вторых, доказательством служит положение Шевардинского редута: Шевардинский редут, впереди той позиции, на которой принято сражение, не имеет никакого смысла. Для чего был сильнее всех других пунктов укреплен этот редут? И для чего, защищая его 24 го числа до поздней ночи, были истощены все усилия и потеряно шесть тысяч человек? Для наблюдения за неприятелем достаточно было казачьего разъезда. В третьих, доказательством того, что позиция, на которой произошло сражение, не была предвидена и что Шевардинский редут не был передовым пунктом этой позиции, служит то, что Барклай де Толли и Багратион до 25 го числа находились в убеждении, что Шевардинский редут есть левый фланг позиции и что сам Кутузов в донесении своем, писанном сгоряча после сражения, называет Шевардинский редут левым флангом позиции. Уже гораздо после, когда писались на просторе донесения о Бородинском сражении, было (вероятно, для оправдания ошибок главнокомандующего, имеющего быть непогрешимым) выдумано то несправедливое и странное показание, будто Шевардинский редут служил передовым постом (тогда как это был только укрепленный пункт левого фланга) и будто Бородинское сражение было принято нами на укрепленной и наперед избранной позиции, тогда как оно произошло на совершенно неожиданном и почти не укрепленном месте.