Соглашение об именах файлов Unix для эффективного завершения табуляции?

Мне кажется, что я часто называю файлы таким образом, что мой компьютер постоянно издает звуковой сигнал, пока я программирую, потому что завершение табуляции неоднозначно. Прежде чем заняться программированием для Unix, я обычно называл связанные файлы одним и тем же префиксом, чтобы указать на их связь. Теперь я должен пересмотреть свой подход к структурам и именам папок и файлов, чтобы программировать более эффективно.

Какие эвристики или правила вы применяете при программировании для упрощения завершения табуляции? Используете ли вы какие-либо инструменты для более плавного завершения табуляции (например, emacs icicles)?

EDIT: Вау, спасибо за фантастическую информацию. Думаю, в ответах были учтены все возможные мои слабые места. Я принял вариант, который кажется лучшим улучшением производительности, хотя все они заслуживают прочтения.


person thebossman    schedule 16.03.2010    source источник
comment
Вы всегда можете включить show-all-if-ambiguous, чтобы вместо звонка вы получили список файлов с неоднозначными именами.   -  person Cascabel    schedule 16.03.2010
comment
@ Пол довольно пограничный, но, вероятно, это примерно на стороне кода. @Jefromi, это выглядит полезно, я думаю, что моя система все равно делает это.   -  person    schedule 16.03.2010
comment
@Ninefingers: для них могут быть системные значения по умолчанию в /etc/inputrc, и я думаю, что вы все равно получите список, если снова нажмете вкладку, даже без настройки.   -  person Cascabel    schedule 16.03.2010
comment
Вы также можете полностью отключить звонок с помощью bell-style.   -  person Cascabel    schedule 16.03.2010
comment
Именование файлов для оптимизации с помощью табуляции звучит как скользкая дорога. Что мешает вам в конечном итоге получить сильно сокращенные имена файлов, понятные только вам? (Я предполагаю, что вы не единственный, кому нужно будет прочитать эти файлы.)   -  person Dave Bacher    schedule 16.03.2010


Ответы (7)


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

Конечно, возникает вопрос, почему вы выполняете автозавершение имен файлов с помощью табуляции? Если вы просматриваете исходный код, обратите внимание на TAGS, CEDET и множество других утилиты, которые позволят вам обойти имя файла и перейти непосредственно к функции/переменной, которая вам действительно нужна.

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

person Trey Jackson    schedule 16.03.2010
comment
Этот. Перегрузка именования для описания отношений редко бывает лучшим способом. - person dmckee --- ex-moderator kitten; 16.03.2010
comment
Ага, и module_part1.ext, module_part2.ext, ... не короче, чем module/part1.ext, module/part2.ext, .... (Это только один символ, если вы используете CamelCase, а завершение табуляции все равно дам тебе косую черту!) - person Cascabel; 16.03.2010

В целом,

setterm -blength 0

отключит звуковой сигнал терминала. экран GNU и некоторые графические терминалы имеют собственные настройки звуковых уведомлений.

Специально для Bash и других Readline – с помощью программного обеспечения поведение завершения с вкладками можно изменить с помощью файлов конфигурации $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
person ephemient    schedule 16.03.2010

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

person Don    schedule 16.03.2010

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

Вы можете распространить эту идею на общий случай выравнивания иерархий. Например, если у вас есть иерархия классов Person->Employee->Programmer, вы можете избежать зеркалирования структуры каталогов кода, вызвав тест programmer_employee_person_test.py. Опять же, более общие компоненты идентификатора появляются позже в названии.

person ire_and_curses    schedule 16.03.2010

Я склоняюсь к тому, что имеет смысл для организации кода, а не к завершению с помощью табуляции - это может варьироваться в зависимости от рассматриваемого кода, поэтому сложно дать прямой ответ, но использование правильных подкаталогов действительно облегчает жизнь. Я согласен с Доном.

Вместо этого я перемещаюсь по источникам, используя такие инструменты, как find . -name {expr} (имена файлов), grep -r {expr} * (определения функций, прототипы и использование) и их комбинации. Можно написать сценарии оболочки для эффективного выполнения операций поиска/замены с использованием sed i 's/find/replace' по всему дереву исходного кода. У меня есть небольшая папка в ~/ по пути, которая содержит несколько полезных скриптов, подобных этому.

Я комбинирую это с такими IDE, как Eclipse для редактирования или VIM, в зависимости от того, что я делаю. На самом деле мне оба нравятся одинаково, так как я использую оба для разных целей.

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

person Community    schedule 16.03.2010
comment
Раньше я использовал ctags для перехода к другим файлам, но в последнее время я достаточно быстро находил betterthangrep.com на своем проекты. ack -G expr для имен файлов, ack expr для поиска содержимого и :set grepprg=ack в Vim делают жизнь потрясающей. - person ephemient; 16.03.2010
comment
Я могу понять, что мне не нравится Emacs, потому что он слишком большой и сложный, но я не могу понять, как использовать вместо него Eclipse — из того, что я видел, это еще больше и сложнее! - person Ken; 17.03.2010

Вы можете использовать меню-завершение вместо завершения:

bind '"\C-i": menu-complete'
echo '"\C-i": menu-complete' >>~/.inputrc
person Mark Edgar    schedule 17.03.2010

Я согласен с другими ответами здесь: вообще не называйте файлы именами, чтобы облегчить завершение или выразить отношения (кроме того, что подразумевается просто описанием того, для чего файл или что он делает).

Wrt completion: Да, это может помочь использовать что-то вроде Сосульки. Есть много различных способов, которыми может помочь гибкое завершение, включая поиск в файлах проекта. См., например, Поиск сосулек.

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

person Drew    schedule 21.08.2011