Соглашение об именах файлов 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. Существует множество способов, которыми может помочь гибкое завершение, в том числе для поиска в файлах проекта. См., Например, Поиск сокетов.

Возможность предоставить несколько простых шаблонов совпадений ( " прогрессивное завершение" ) тоже помогает - это намного проще, чем придумать один, сложное регулярное выражение. Аналогичным образом, возможность исключить совпадения для определенных шаблонов ( "" скопировать не-слона") полезна. Наконец, для сопоставления имен файлов иногда может быть также полезно сопоставить компоненты каталогов.