tools/vim

Learn Vimscript The Hard Way - 40. Paths

seul chan 2020. 4. 20. 08:39

Paths

vim은 텍스트 에디터이고, 텍스트 에디터는 (보통) 텍스트 파일로 작동한다. 텍스트 파일은 filesystem에 존재하고, 어떤 경로에 특정한 파일이 존재한다. vimscript는 경로에 대해 작업할 떄 사용하는 특별한 빌트인 함수들을 가지고 있다.

Absolute Paths

외부 스크립트에서 해당 파일의 절대 경로를 알게 되면 유용한 경우가 있다.

:echom expand('%')
:echom expand('%:p')
:echom fnamemodify('foo.txt', ':p')

첫 번 째 명령어는 현재 수정중인 파일의 상대경로를 보여준다. %는 "현재 파일"을 의미한다.

두 번 째 명령어는 절대 경로를 보여준다. :p는 vim에서 절대 경로 string을 의미한다.

세 번 째 명령어는 현재 디렉토리의 foo.txt의 경로를 반환한다. (실제 파일의 유무와 상관없이) fnamemodify() 명령어는 파일 이름을 다룰 때 사용하는 expand()보다 더 유연한 명령어이다.

Listing Files

가끔은 특정 경로의 파일 리스트가 필요할 때가 있다.

:echo globpath('.', '*')

현재 디렉토리의 모든 파일과 디렉토리를 반환한다. globpath()는 newline 캐릭터로 나눠진 string을 반환한다. 만약 리스트가 필요하다면 split()을 사용하여야 한다.

:echo split(globpath('.', '*'), '\n')

이번에는 리스트가 반환되는 것을 볼 수 있다. 만약 파일명에 newline 캐릭터가 있다면 그것은 직접 처리해야한다. (ㅋㅋㅋ 역시 파일명에 띄어쓰기는 지양하자)

globpath()의 와일드카드는 예상했던 대로 사용된다.

:echo split(globpath('.', '*.txt'), '\n')

현재 경로에서 .txt 확장자를 가진 파일만 리스트업한다.

**를 사용해서 해당 경로에서 재귀적으로 하위 경로의 파일까지 나타낼 수 있다.

:echo split(globpath('.', '**'), '\n')

Exerciese

  • Read :help expand().

  • Read :help fnamemodify().

  • Read :help filename-modifiers.

  • Read :help simplify().

  • Read :help resolve().

  • Read :help globpath().

  • Read :help wildcards.