표시된 디렉토리에서 정규 표현식과 일치하는 파일을 반복적으로 엽니 다.


9

일반적으로 말하자면 파일 이름이 지정된 정규 표현식과 일치하는 지정된 디렉토리 세트 (및 해당 하위 디렉토리) 내의 모든 파일을 열 수 있기를 원합니다.

예를 들어

  /home/nispio/project:
  total used in directory 1612 available 1000000000
  drwxrwxr-x 13 nispio group    4096 Sep 19 14:06 .
  drwxrwxr-x  7 nispio group    4096 Sep 22 16:41 ..
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 cfg
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 hlp
* drwxrwxr-x  2 nispio group    4096 Sep 23 16:52 hst
* drwxrwxr-x  2 nispio group    4096 Sep 29 14:52 inc
* drwxrwxr-x  2 nispio group    4096 Oct  1 12:53 lib
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 mcr
  drwxrwxr-x  2 nispio group    4096 Sep 24 10:50 pyl
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 snr
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 unix

나는 디렉토리를 표시 한 hst, inc그리고 lib, 지금은 확장자를 가진 모든 파일을 방문하고자하는 .c, .cc그리고 .h그 세 디렉토리와 그 하위 디렉토리 내에서.

열기 전에 내가 여는 모든 것을 볼 수 있다면 더 좋을 것입니다. dired 버퍼가 업데이트되어 내 검색과 일치하는 모든 파일이 표시되고 모든 파일이 강조 표시되면 검색이 예상 한 것을 반환하는지 확인하기 위해 온 전성 검사를 수행 할 수 있습니다.

나는 사용하여이 같은 일을 제안 오픈 오전 helm이나 dired+또는 저를하게됩니다 다른 확장이 더 쉽게 내 파일 시스템을 탐색 할 수 있습니다.


Mathias 또는 Drew가 귀하의 질문에 답변 했습니까? 아니면 다른 것을 찾고 있었습니까?
Malabarba

답변:


14

이 시도:

C-u C-x d

Dired에서 파일을 나열하는 방법에 대한 인수를 입력 할 수 있습니다. 기본적으로 -al프롬프트에 표시됩니다. R그것에 추가 하여로 끝납니다 -alR. 을 입력하십시오 RET.

디렉토리를 선택 / 입력 한 다음를 누릅니다 RET.

그러면 선택한 디렉토리에서 아래의 모든 디렉토리가 반복적으로 열립니다.

여기에서 % m특정 파일 이름 패턴과 일치하는 모든 파일을 표시하려면 입력하십시오 . 또한 자주 입력 t한 다음 k관심없는 모든 파일을 종료 (숨기기) t합니다. 모든 파일을 표시하려면 다시 입력 하십시오.

실제로 파일을 여는 한 표준 방법이 없다고 생각하지만 새 명령을 쉽게 정의하여 .emacs파일 에 넣을 수 있습니다.

(defun dired-find-marked-files ()
 (interactive)
 (dolist (f (dired-get-marked-files)) 
  (find-file f)))

아마 누군가가 이미 멋진 Dired 향상 패키지에 이것을 포함 시켰지만, 직접하는 것도 재미 있습니다.)

즐겨!


7

helm-projectile-find-file을 사용 하면이 작업을 쉽게 수행 할 수 있습니다 . Projectile은 상대 경로로 모든 파일을 추적하기 때문에 원하는대로 쉽게 좁힐 수 있습니다. 당신의 모범을 보자. 귀하의 경우에는, 당신은 오픈 파일을 원하는 hst, inc하고 lib. 다음 두 가지 방법으로이 디렉토리에 속하는 모든 파일을 검색 할 수 있습니다.

  • 의 Helm 프롬프트에서 helm-projectile-find-file각 디렉토리와 해당 디렉토리로 좁혀진 파일을 입력하십시오. 예를 들어, 먼저 입력합니다 ^hst/( hst/각 후보의 시작 부분에 포함 된 모든 파일로 좁힘 ). 로 모든 파일을 표시M-a 하고 다른 두 디렉토리의 파일과 비슷한 작업을 수행하십시오.

  • 또는, 당신은 할 수 있습니다 이 패턴을 사용하여 모든 디렉토리에있는 파일을 검색 : ^hst/\|^inc\|^lib. Helm은 결국 정규식을 허용합니다. 정규식 \|은을 의미 or합니다. 한 번에 모든 것을 선택하려면이 작업을 수행하십시오.

이 중 하나를 사용하면 열려는 모든 파일을 표시하게됩니다. 그런 다음을 눌러 RET모두 엽니 다.

해당 디렉토리에 많은 파일이 있으면을 늘려야 helm-candidate-number-limit합니다. 그렇지 않으면 후보 수가 한계에 도달하면 더 이상 후보가 표시되지 않으며 보이지 않는 후보를 선택할 수 없습니다. 더 높은 숫자로 설정 nil하거나이 제한을 원하지 않으면로 설정하십시오.

Helm의 좋은 점은 대화식으로 파일을 선택할 수 있다는 것입니다.


나는 그가 그들 중 하나를 선택하지 않고 그들을 동시에 열기를 원한다고 생각합니다.
Malabarba

1
@Malabarba M-a사용하여 여러 파일을 선택 helm-projectile-find-file하고 RET을 한 번 눌러 나열된 방법으로 모두 열 수 있습니다.
Tu Do

물론이야! 죄송합니다, 그 문장을 놓쳤습니다. 나는 나 같은 바보에게 좀 더 분명하게 편집했습니다. 마음에 들지 않거나 내가 잘못한 경우 언제든지 롤백하십시오.
Malabarba

@ 말라 바바 감사합니다. 지금은 더 명확합니다.
Tu Do

4

두 가지 가능성 (대체)이 있습니다.

  1. Dired ls에는 포함 된 스위치를 -R사용하거나 i특정 하위 디렉토리를 포함 하여 사용 하려는 파일이 포함 된 모든 하위 디렉토리를 포함 할 수 있습니다 . 라이브러리 Dired + 를 사용하는 경우 * .(bound to diredp-mark/unmark-extension)를 사용 하여 지정된 확장자 (예 :) 가있는 나열된 모든 파일을 표시 한 .h다음 F(bound to dired-do-find-marked-files)를 사용 하여 표시된 모든 파일을 열 수 있습니다.

  2. 라이브러리 Dired + 를 사용하면 표시된 하위 디렉토리의 모든 표시된 파일 및 모든 표시된 파일에 대해 반복적으로 정의 된 IOW, 하위 디렉토리의 하위 디렉토리, 해당 하위 디렉토리 등을 수행 할 수 있습니다.

    표시된 디렉토리의 경우 해당 디렉토리에 파일이 표시되지 않은 경우 (즉, 해당 하위 디렉토리의 Dired 목록에 표시됨) 모든 파일 에 대한 조치가 수행됩니다 .

    이러한 파일에 대해 다른 방식으로 (열기, 검색 등) 수행하는 명령이 상당히 많습니다. 그러나 작업 할 파일은 그런 방식으로 만 결정됩니다. 집합을 필터링하기 위해 glob 패턴이나 regexp를 입력 할 가능성도 없습니다.

    그러나 라이브러리 IciclesDired + 와 함께 사용하는 경우 M-+ C-F, 즉 M-+ C-S-f(바운드 icicle-visit-marked-file-of-content-recursive)을 사용하여 방금 설명한 모든 파일 (즉, 재귀 적으로 정의되거나 표시된 하위 디렉토리에있는 파일)을 열 수 있습니다.

    정규식을 사용하여 파일 이름 및 / 또는 파일 내용을 필터링 할 수 있습니다. 예를 들어, 당신은, 당신의 요구로, 확장명을 가진 모든 파일을 열 수 있습니다 .c, .cc그리고 .h표시된 하위 디렉토리에 (표시 하위 디렉토리로 재귀 적으로 동일한 방식으로 처리되는).


3

eshell은 zsh 스타일 **/*글로브 확장을 처리 하므로 올바른 디렉토리에서 eshell을 실행하고 실행하는 방법이 있습니다.for f in **/*cc **/*h { find-file $f}

또는 find-fileelisp에서 호출 될 때이 함수 는 와일드 카드를 지원합니다. 다음은 해당 문서에서 유용한 스 니펫입니다 find-file.

(find-file FILENAME &optional WILDCARDS)
Interactively, or if WILDCARDS is non-nil in a call from Lisp, expand wildcards (if any) and visit multiple files.

zsh 스타일 globbing으로 작동시키는 방법을 알 수 없었지만 좋은 옵션 일 수 있습니다.

이러한 파일이 모두 단일 소스 제어 프로젝트에있는 경우 발사체 가 다르고 더 나은 접근 방식 일 수 있습니다.

추신. eshell eshell-toggle-cd을 사용하는 경우 키에 바인딩 하여 편집중인 버퍼 디렉토리에서 eshell 프롬프트를 쉽게 팝업 할 수 있습니다.


나는 그것이 find-file재귀 적으로 작동 할 것이라고 생각하지 않습니다 . 이것은 내가 따르는 주요 기능입니다. 쉘을 열고 명령을 입력하면 너무 많은 작업처럼 보입니다. 왜냐하면 내 명령이 다음과 같아야하기 때문입니다. for d in inc src hst { for f in $d/**/*cc $d/**/*c $d/**/*h { find-file $f } }또는 그보다 간단합니까?
nispio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.