Соглашение об именах файлов Unix для эффективного завершения табуляции?
Мне кажется, что я часто называю файлы таким образом, что мой компьютер постоянно подает звуковой сигнал, когда я программирую, потому что заполнение вкладки неоднозначно. Прежде чем делать много программ Unix, я обычно называл связанные файлы с тем же префиксом, чтобы указать их отношение. Теперь я должен пересмотреть мой подход к папкам и структурам файлов и именам для более эффективной работы.
Какие эвристики или правила вы применяете при программировании, чтобы упростить выполнение табуляции? Используете ли вы какие-либо инструменты, чтобы сделать плагин более гладким (например, emacs icicles)?
EDIT: Ого, спасибо за фантастические идеи. Я думаю, что в ответах были учтены все возможные слабые места. Я принял тот, который кажется лучшим улучшением производительности, хотя все они заслуживают внимания.
Ответы
Ответ 1
Я вообще работал над проектами, где связанные файлы находятся в одном каталоге, а сами имена файлов специализированы для указания их содержимого.
Конечно, это задает вопрос, почему вы делаете вкладку в именах файлов? Если вы просматриваете исходный код, TAGS, CEDET и множество других утилит, которые позволят вам обойти имя файла и сразу перейти к функции/переменной, действительно после.
Все зависит от того, что вы действительно пытаетесь сделать, и поиск определенного файла обычно означает средство для другого конца.
Ответ 2
В общем случае
setterm -blength 0
отключит звуковой сигнал терминала. экран GNU, а некоторые графические терминалы имеют свои собственные настройки оповещений.
В частности, для Bash и других Readline -using, поведение завершения табуляции можно изменить с помощью конфигурационных файлов $INPUTRC
, /etc/inputrc
и ~/.inputrc
. Например,
bell-style none # never ring the bell
bell-style visible # use visual bell, if available
show-all-if-ambiguous on # list all completions instead of ringing the bell
Ответ 3
Я должен признать, что я нахожу свои файлы без учета завершения табуляции, а вместо этого настраиваю свое желание на вкладку, пока не узнаю, что набрал достаточно символов, чтобы не получить tab-глупо.
Ответ 4
Каталоги для файлов с общением обычно являются хорошей идеей, но не всегда это возможно. В этих случаях простой подход, который хорошо работает, заключается в том, чтобы поставить общность в суффиксе, а не в префикс. Например, я называю свои модульные тесты "_test.py
" в качестве суффикса. Выполнение этого в обратном направлении (например, test_foo.py
) завершило бы завершение табуляции для каждого тестового файла.
Вы можете расширить эту идею до общего случая для выравнивания иерархий. Например, если у вас есть иерархия классов Person->Employee->Programmer
, вы можете избежать зеркалирования структуры каталогов кода, вызвав тест programmer_employee_person_test.py
. Опять же, более общие компоненты идентификатора приходят позже в имени.
Ответ 5
Я имею тенденцию идти с тем, что имеет смысл для организации кода, а не для заполнения вкладки - это может варьироваться в зависимости от кода, о котором идет речь, поэтому трудно дать прямой ответ, но использование соответствующих подкаталогов делает жизнь проще. Я согласен с Доном.
Вместо этого я перемещаюсь по источникам с помощью таких инструментов, как find . -name {expr}
(имена файлов), grep -r {expr} *
(функции defs, protos и использование) и их комбинации. Возможно написать сценарии оболочки, чтобы эффективно выполнять операции поиска/замены с помощью sed i 's/find/replace'
по всему вашему исходному дереву. У меня есть небольшая папка в моем ~/на пути, который предоставляет несколько полезных скриптов, подобных этому.
Я совмещаю это с IDE, например Eclipse для редактирования, или VIM, в зависимости от того, что я делаю. Мне нравятся оба одинаково, действительно, поскольку я использую оба для разных целей.
Что касается Emacs, я пробовал, мне это не нравится. Это слишком много и сложно, и у меня есть все, что нужно сделать, чем научиться его использовать (нормально, пусть останавливается там до того, как мы начнем обсуждение "реальных программистов..." ). Поэтому я не могу комментировать инструмент Emacs, с которым вы связались. Наверное, попробую и посмотрим, поможет ли это.
Ответ 6
Вы можете использовать menu-complete вместо полного:
bind '"\C-i": menu-complete'
echo '"\C-i": menu-complete' >>~/.inputrc
Ответ 7
Я согласен с другими ответами здесь: в общем, файлы имен не облегчают завершение или не выражают отношения (кроме того, что подразумевается в просто описании того, что для файла есть или делает).
Завершение работы: Да, это может помочь использовать что-то вроде Icicles. Существует множество способов, которыми может помочь гибкое завершение, в том числе для поиска в файлах проекта. См., Например, Поиск сокетов.
Возможность предоставить несколько простых шаблонов совпадений ( " прогрессивное завершение" ) тоже помогает - это намного проще, чем придумать один, сложное регулярное выражение. Аналогичным образом, возможность исключить совпадения для определенных шаблонов ( "" скопировать не-слона") полезна. Наконец, для сопоставления имен файлов иногда может быть также полезно сопоставить компоненты каталогов.