Или: как я так разозлился на разные IDE и инструменты, что заставил меня написать этот пост с опозданием.

Как сказано в подзаголовке, этот пост написан несколько позже, чем планировалось. Я провел эти выходные, работая над данными для моего Лямбда-дня, и меня так расстроили доступные мне инструменты, что я почти сдался.

Но я не сдавался и даже кое-чему научился. Так что!

Краткая история: Блокнот Jupyter с привязками клавиш Vim

Однажды подросток в Израиле решил научиться программированию. У него уже был доступ к Интернету, и он кое-где читал, что он не может использовать «нано» для серьезного программирования на C. В то время, используя Debian linux, разрабатывая C для проекта с открытым исходным кодом, Интернет предлагал ему один из двух вариантов:

Vim или Emacs.

Вы можете догадаться, чем продолжается наша история. Я выбрал Vim, и, как говорится в стихотворении, извините, я не смог путешествовать вместе.

От Vim трудно избавиться, и время от времени я обнаруживаю, что использую инструменты, которые не поддерживают даже минимальный набор привязок клавиш Vim. Учитывая, что даже Emacs теперь поддерживает привязки клавиш Vim (хотя некоторые скажут, что это зло), меня все еще удивляет, что мне нужно использовать какой-то инструмент, который ожидает, что я выучу новые ярлыки редактора. Или, что еще хуже, думает, что мышь - подходящее устройство ввода для инструмента программирования.

Jupyter Notebook - такой инструмент, но есть решение: jupyter-vim-bindings от lambdalisue. Спасибо, lambdalisue!

Я просто скопирую инструкцию по установке, на случай, если вам лень самому зайти в репозиторий:

# Create required directory in case (optional)
mkdir -p $(jupyter --data-dir)/nbextensions
# Clone the repository
cd $(jupyter --data-dir)/nbextensions
git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
# Activate the extension
jupyter nbextension enable vim_binding/vim_binding

А теперь… Немного разглагольствования!

Прежде чем найти замечательное расширение для блокнотов lambdalisue, я пробовал несколько других решений, все они в той или иной степени были недостаточны.

IPython

Сначала я попытался использовать ipython без инструментов Jupyter Notebook. Чертовски хороший REPL! У него есть история, которая сохраняется между сессиями, у него настолько хорошая интеграция с оболочкой, что я действительно подумал об использовании ее в качестве оболочки для входа!

Он может даже выполнять привязки клавиш Vi:

$ ipython profile create  # Create a profile
$ vim ~/.ipython/profile_default/ipython_config.py
# Look for the line saying c.TerminalInteractiveShell.editing_mode = 'emacs'
# Uncomment the line and replace 'emacs' with 'vi'

Но ipython не так хорош при попытке создать воспроизводимый код. Примерно через час работы моя история насчитывала уже 200 строк, заполненных одной и той же строкой кода с небольшими вариациями, большинство из которых неверны. Когда я попытался оглянуться на историю своей работы и повторить некоторые шаги, я понял, что довольно неприятно выяснять, какие из них были выполнены успешно, а какие - нет.

Spacemacs

Spacemacs - это потрясающий репозиторий конфигурации для Emacs, который поставляется с большим набором слоев, на которые легко установить плагины для разных языков и инструментов. Один из этих слоев - слой ipython-notebook, который позволяет вам открывать записную книжку Jupyter как буфер Emacs.

О, и я упоминал, что в SpaceMacs по умолчанию используется злой мод?

Сначала это выглядело просто потрясающе! Я могу работать с Vim, пока загружаю свой блокнот Jupyter в Emacs!

Но тут случайно вылетел буфер.

И удалил блок кода, который не собирался удалять.

И затем удалил еще несколько кодов, когда я попытался отменить удаление предыдущего!

И, наконец, я испортил всю свою записную книжку, поэтому стало невозможно открыть ее в веб-интерфейсе Emacs или Jupyter.

В этот момент я заплакал.

Выводы

Мне сложно сделать однозначные выводы из этого опыта. Я бы просто хотел использовать инструменты, которые мне нравятся, для всего, но я думаю, что иногда «один размер подходит всем» означает, что он не подходит так хорошо.

Я также многое узнал о том, как справляться с неприятными переживаниями. В основном я понял, что мне нужно узнать больше.

На этом пока все!