3

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

Если у меня есть файл foo.py открытый в vim, .foo.py.swp также существует в каталоге. Поведение, которое я вижу, таково:

C:\foo> f[TAB]
C:\foo> .foo.py.swp[TAB]
C:\foo> foo.py

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

2 ответа2

3

Windows ведет себя точно так, как вы ожидаете, если вы обдумаете это (и, честно говоря, до тех пор, пока я не увидел ваш вопрос, я не продумал его полностью). Имя файла, начинающееся с «.» рассматривается как файл с нулевым именем файла с расширением. Чтобы увидеть, как это работает, создайте каталог, а затем создайте следующие файлы, используя touch (я предполагаю, что вы знакомы с touch):

touch .a.aaa
touch a.aaa
touch .b.bbb
touch b.bbb

Теперь, в этом каталоге, используйте клавишу Tab для перемещения по файлам, и вы увидите, что последовательность такова:

.a.aaa
.b.bbb
a.aaa
b.bbb

Если вы хотите просмотреть файлы «a», введите «a» перед вкладкой, и вы получите предсказуемые .a.aaa , a.aaa .

Что касается символа _ в имени файла, он, как и любой другой символ, сортируется после «Z».

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .