Как я могу запретить vim редактировать каталоги?

Чтобы отфильтровать удобочитаемые имена файлов, вы можете использовать [: print:] ( печатное ) имя класса символов . Вы найдете больше о таких классах в руководстве для grep .

find . -type f -size 1033c -name "[[:print:]]*" ! -executable

С другой стороны, требование «удобочитаемости» может относиться к содержимому файла, а не к его имени. Другими словами, вы будете искать текстовые файлы. Это немного сложнее. Как предлагает @D_Bye в комментарии, вы должны затем использовать команду file , чтобы определить тип содержимого файла. Но запускать файл после канала было бы не очень хорошей идеей, потому что это усложнило бы задачу отображения имени файла. Вот что я предлагаю:

find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print

Вкратце, как работает file -part:

  • Предикат -exec выполняет sh -c 'file -b $ 0 | grep -q text 'FILENAME для каждого FILENAME , который удовлетворяет всем предыдущим условиям (тип, размер, неисполняемый).
  • Для каждого из этих файлов оболочка ( sh ) запускает этот короткий сценарий : file -b $ 0 | grep -q text , заменяя $ 0 именем файла.
  • Программа file определяет тип содержимого каждого файла и выводит эту информацию. Параметр -b предотвращает печать имени каждого проверенного файла.
  • grep фильтрует вывод, поступающий из программы файл , ища строки, содержащие «текст» . (Убедитесь сами, как выглядит типичный вывод команды file .)
  • Но grep не выводит отфильтрованный текст, потому что он имеет -q (тихий) вариант. Он просто меняет свой статус выхода либо на 0 (что означает «истина» - найден отфильтрованный текст), либо на 1 (что означает «ошибка» - текст ] "текст" не появился в выводе из файла ).
  • Истинный / ложный статус выхода, поступающий из grep , передается далее sh в find и действует как окончательный результат для всего » -exec sh -c 'file $ 0 | grep -q text' {} \; "test.
  • В случае, если вышеуказанный тест вернул истину , выполняется команда -print (т.е. печатается имя проверяемого файла).
5
23.07.2016, 22:01
2 ответа

Вы можете поместить следующие строки в свой vimrc, чтобы закрыть vim, если какой-либо из его аргументов является каталогом:

for f in argv()
  if isdirectory(f)
    echomsg "vimrc: Cowardly refusing to edit directory " . f
    quit
  endif
endfor

В качестве альтернативы, если вы хотите закрыть только в том случае, если аргументы all являются каталогами, вы можете попробовать что-то вроде этого:

let ndirs = 0
for f in argv()
  if isdirectory(f)
    let ndirs += 1
  endif
endfor
if ndirs > 0 && ndirs == argc()
  echomsg "vimrc: Cowardly refusing to edit directories"
  quit
endif
5
27.01.2020, 20:39

Это похоже на вывод плагина netrw.

Это можно отключить, введя файл ~/.vimrc.

let loaded_netrwPlugin = 1

Теперь, если вы попытаетесь отредактировать каталог, вы получите ошибку это каталог.

0
27.01.2020, 20:39

Теги

Похожие вопросы