Я недавно изучил C и хочу начать проект, чтобы укрепить свои знания. Я решил создать очень простой текстовый редактор, похожий на vim. Проблема, с которой я сталкиваюсь, заключается в том, что я действительно понятия не имею, как работает текстовый редактор, и я не знаю, что искать в Google, чтобы узнать об этом.
Погугление по этому поводу привело к репозиторию Vim GitHub, который для меня бесполезен, потому что кодовая база огромна, а код сбивает меня с толку. Я также нашел учебники по созданию текстового редактора на C, который работает как vim.
Хотя я думал о том, чтобы следовать учебным пособиям, это похоже на обман. Как разработчики vim выяснили, как кодировать vim без специальных руководств? Или они начинались с более простых текстовых редакторов? Как они поняли это только благодаря знанию языков и их документации?
Что именно мне нужно, чтобы начать писать этот текстовый редактор, не следуя непосредственно руководству? Еще один пример, который мне нравится думать: как Деннис Ритчи и Кен Томпсон создали Unix? У меня есть представление о том, как функционирует ОС, но я не знаю, как поместить это в код. Что мне не хватает? Как я могу передать эти знания языка для практического использования?
Ответы:
Если это ваш первый программный проект, даже простой текстовый редактор может оказаться слишком сложным. Что-то вроде vim или ОС полностью исключено.
Подход к проблеме
В целом, способ начать примерно одинаков для большинства проектов:
пример
Давайте возьмем пример текстового редактора.
Вы хотите отобразить часть текстового файла на экране, вставить и удалить символы и сохранить текущую версию.
Начните с простого чтения файла и отображения его содержимого.
Вы обнаружите (среди прочего) следующие подзадачи:
Как только вы достигнете точки, когда ваше требование (загрузить файл и отобразить его) будет выполнено, вы можете начать думать о том, как отображать только часть, которая будет соответствовать экрану, перемещаться по файлу и т. Д.
Следующий шаг
Со временем, когда вы будете решать все более и более сложные проблемы, вы поймете, что становится все труднее находить подходящие способы разложения ваших проблем. Вы также заметите, что изменение кода со временем может стать утомительным.
На этом этапе пришло время изучить некоторые базовые концепции архитектуры и дизайна.
источник
Вы не
Если у вас даже нет смутного представления о том, как что-то сделать, это признак того, что это выходит за рамки ваших текущих навыков. Потому что, если вы не знаете, с чего начать, у вас точно не будет представления о самой сложной части приложения.
источник
less
,more
илиview
программ. Они разделяют некоторые аспекты редакторов без сложности изменяемых буферов редактирования.Вам нужно решить, как вы хотите, чтобы ваш текстовый редактор работал.
Это один из самых отягчающих и полезных примеров разработки ваших собственных проектов от начала до конца. Никто не отправляет вам требования для сборки. Вы должны разработать свои собственные требования.
Это означает, что вам нужно будет выполнить большую работу по проектированию, прежде чем вы начнете писать свою первую строку кода. Вам нужно будет решить, как выглядит интерфейс. Вам нужно будет решить, какие функции включить. Оба вышеперечисленных вопроса будут основаны на том, на что вы способны. Если вы думаете об «идеальной» ситуации (как вы хотели бы, чтобы интерфейс работал), но вы не чувствуете, что способны ее кодировать, тогда вам нужно начать искать альтернативные подходы: как я могу заставить это работать? Это поможет вам сосредоточиться на подходах к кодированию, о которых вы, возможно, захотите узнать больше.
Как уже говорили другие, попытка скопировать vim может быть не лучшим подходом, так как это большая и сложная кодовая база. Вы также отказываете себе в дизайнерской работе, которая, по моему скромному мнению, помогает вам как разработчику.
Это не значит, что вам нужно, чтобы все приложение разрабатывалось от начала до конца, прежде чем вы напишете свою первую строку кода. Вполне нормально, что требования меняются со временем, когда вы узнаете больше. Можно добавлять новые функции, о которых вы не думаете, пока не протестируете / не используете свое собственное приложение и не подумаете: «Не было бы неплохо, если бы ...» Можно начать с простого.
источник
Написание полнофункционального текстового редактора с нуля без опыта программирования глупо: вы будете обескуражены и откажетесь от него, прежде чем многому научитесь.
На ум приходят несколько альтернатив:
vim
, посмотрите на это и попытайтесь понять что-то маленькое и изолированное, например, как оно представляет данные, или ищет один символ (f
команду).cat
команда затемwc
затемgrep
затемsed
, например.источник