Какой редактор использовать при работе в shell на сервере
Что проверяют
Уверенно ли вы чувствуете себя на удалённой машине без IDE и понимаете ли, что править код прямо на сервере в целом плохая практика. Следом могут спросить, как выйти из vim, или как поправить конфиг в контейнере, где редактора нет вовсе.
Как отвечать
Короткий ответ: vim, потому что vi есть почти в любом дистрибутиве, и nano для разовых правок там, где он установлен. Дальше покажите, что знаете контекст:
- минимум vim:
iдля вставки,Esc,:wqсохранить и выйти,:q!выйти без сохранения,/текстдля поиска,uдля отмены. Этого хватает, чтобы не застрять; - отступы в Python: если терминал не поддерживает bracketed paste, вставленный код съезжает лесенкой из-за автоотступа, выручает
:set paste. Для питоновских файлов пригодится:set expandtab shiftwidth=4 tabstop=4, иначе табы вперемешку с пробелами дадутTabError; - права: вместо
sudo vimлучшеsudoedit(sudo -e): редактор работает от вашего пользователя над временной копией файла; - переменная
EDITOR: её читаютcrontab -e,git commit,visudo, так что привычный редактор стоит прописать в ней; - контейнеры: в slim-образах Python редактора обычно нет, и ставить его в работающий контейнер бессмысленно, правка пропадёт при пересоздании.
И главный тезис: код и конфиги должны приезжать на сервер из git через CI, Ansible или сборку образа. Ручная правка на проде допустима как экстренная мера, после которой изменение сразу переносится в репозиторий. Для постоянной работы с удалённой машиной удобнее VS Code с Remote SSH или PyCharm с удалённым интерпретатором.
Где спотыкаются
Устраивают спор vim против emacs вместо ответа по существу. Интервьюеру не важен ваш любимый редактор, важно, что вы не беспомощны в терминале.
Называют nano единственным вариантом и теряются, когда его нет. На многих серверах и в образах на базе Alpine есть только vi из BusyBox.
Правят файлы на проде и не переносят правку в репозиторий. Следующий деплой молча затирает исправление, и баг возвращается в самый неудобный момент.