Vim의 커서 아래에 파일을 만듭니다.


10

파일 목록이 있습니다

file1.ext
file2.ext
...

커서가 file2.ext 안에있는 경우 file2.ext 이름으로 파일을 작성하는 방법 gf새 파일을 만드는 것만 비슷 합니다 (가설적인 상황이므로 언젠가 도움이 될 것이라고 생각했습니다).

답변:


17

내 마음에 오는 첫 번째 것은 touch커서 아래에 파일 이름을 전달 하는 명령 을 사용하는 것입니다.

:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

그러나 여러 플랫폼에서 이식 가능한 순수한 Vim 솔루션이 있습니다. 내장 함수 writefile는 목록을 한 줄씩 파일에 씁니다. 당연히 입력 목록이 비어 있으면 빈 파일이 만들어집니다. (자세한 내용 :help writefile은 참조)이 부작용을 활용할 수 있습니다.

:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

파일 이름 추출은 다른 expand패턴 을 사용하여 조정할 수 있습니다 (참조 :help expand()).

그런데 파일을 만들지 않고 편집을 위해 파일을 열려면 다음 gf과 같은 매핑을 정의 할 수 있습니다 .

:map <leader>gf :e <cfile><cr>

여기서 :e명령으로 대체 할 수 있습니다 :tabe또는 유사한 명령.


1
<cfile>대신 강의 +1<C-r><C-f>
sehe

2

위의 ib로 탁월한 대답을 취하여 다음과 같이 확장했습니다. 내 목표는 vim을 사용하여 위키에 필요한 새 마크 다운 파일을 만드는 것이 었습니다 (이 경우 골룸 위키).

나는 처음 시도했다 :

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

위의 답변에 명시된대로 작동합니다. 그러나 처음에는 실제로 파일이 vim에서 열리는 것을 보지 못했기 때문에 작동하지 않는다고 생각했습니다. 아래 코드의 두 번째 비트를 사용하면 새 파일이 열립니다. 그래서 나는 그들을 결합하고 시도했다.

map <leader>cf :e <cfile><cr>

wiki 구문과 같은 구문을 사용하여 wiki에서 새 파일을 만들려고 할 때 [[the-new-file]]대괄호로 파일의 확장자를 허용하지 않기 때문에 wiki에서는 작동하지 않습니다. 그러나 Vim은 새 파일을 만들 때 확장명을 알아야이 파일이 작동합니다. 이 경우에는 다음을 사용했습니다.

    map <leader>cf :e <cfile>.md<cr>

새 마크 다운 파일을 만들 수 있습니다. 확장 기능을 하드 코딩하지 않고이를 사용자 정의하는 방법이 있지만 위의 요구 사항에 적합합니다. 다른 확장자 (예 : .wiki 파일 저장)가 필요한 경우 간단한 경로를 사용하여 다음과 같은 다른지도를 만들 것입니다.

    map <leader>cwf :e <cfile>.wiki<cr>

부작용으로 동일한 명령을 사용하여 기존 마크 다운 파일을 열 수 있습니다 ( gf파일 확장자가 없기 때문에 표준 명령은 여기서 작동하지 않습니다).


gf경우 작동합니다 set suffixesadd=.wiki. 개선 된 버전은 적어도 하나의 항목 만 포함하는 경우 cf존중 하는 버전입니다 suffixesadd.
hjdivad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.