vim에서 현재 파일을 어떻게 삭제할 수 있습니까?


85

vim 내에서 현재 열려있는 파일을 디스크에서 어떻게 삭제할 수 있습니까? 버퍼를 닫는 것도 좋을 것입니다.

나는 당신 이 NERDTree를 사용할 수 있음 을 알지만이 플러그인을 사용하지 않습니다.

답변:


102

rm (1) 과 같은 외부 도구를 사용하는 것은 좋지만 Vim에는 delete()파일 삭제를위한 자체 기능 도 있습니다. 이것은 휴대용이라는 장점이 있습니다.

:call delete(expand('%'))

이것을 표현하는 다른 방법은 (현재 파일) 레지스터 (@accolade의 팁) :call delete(@%)를 사용하는 %입니다.

디스크의 파일 표현과 Vim 버퍼 모두 현재 버퍼를 완전히 제거하려면 :bdelete다음을 추가하십시오 .

:call delete(expand('%')) | bdelete!

선호도에 따라이를 매핑 할 수 있습니다.


7
감사! .vimrc의 다음 맵이 작동하는 것 같습니다 nnoremap rm :call delete(expand('%')) \| bdelete!<CR>.. 답변에 추가 할 수 있습니다.
fotanus

13
그 매핑은 이상적이지 않습니다. 우리는 r명령 을 어 기고 싶지 않습니다 ! 매핑에 <Leader>....
glts

2
Ctrl + Del을 사용하여 매핑 nnoremap <C-Del> :call delete(expand('%'))<CR>했지만 우연히 발생하는 경우 버퍼를 닫지 않습니다. 그래도 저장할 기회가 있습니다.
Evgeni Sergeev

3
:call delete(@%)|q!← 짧은 변형 (매핑을 원하지 않는 경우). (버퍼는 그대로 남아 :ls있으며 :b이런 방식 으로 되 살릴 수 있습니다 . 파일 내용은 유지하지 않고 파일 이름과 버퍼 옵션은 유지합니다.)
Aaron Thoma

2
@accolade, 나는 당신의 속임수를 좋아하지만 부활 :call delete(@%)|bd!하려면 :ls!with :b를 사용 하고 사용해야 합니다.
Bart Louwers 2016

87

Vim 명령으로 파일 삭제를 살펴보십시오 . 댓글 섹션은 당신이 찾고있는 무엇을해야한다 :

기본적으로 Rm은 현재 파일을 삭제합니다. RM은 현재 파일을 삭제하고 버퍼를 저장하지 않고 한 번에 종료합니다.

또는 쉘 명령을 실행하여 현재 파일을 제거 할 수 있습니다.

:!rm %

1
너무 간단해서 스크립트를 만들어야한다는 사실을 믿을 수 없을 정도입니다. 감사.
fotanus

3
로 삭제 !rm %하면 vim이 버퍼로 돌아갈 때 경고를 피할 수있는 방법이 있습니까?
fotanus

1
파일 이름에 특수 문자가있는 경우이 명령은 파일 이름이 공백이있는 20130711-contacts # 285.vcf 인 경우 'rm : cannot remove`20130711-contacts': 해당 파일 없음 또는 directory '
Saeed

4
@ saeed144, 파일 이름에 공백 (또는 셸 수준에서 해석하지 않으려는 다른 문자)의 경우 파일 이름 ( %)을 따옴표로 묶어야합니다 : !rm "%".
David Cain

8
데이터 위험 경고!단지와 함께 %(파일 경로 ( " 파일 이름을 원래 잠재적 상대, 예를 들어 단지 파일의 이름을 호출로 정력 용어로")) 대신 %:p(절대 파일 경로) 대신 다른 디렉토리에 같은 이름의 파일을 삭제하는 위험의 작은을 실행 당신이 :cd거기에서 에드를 잊었다면 . 따라서 어쨌든 매핑하는 %:p대신 사용하는 것이 좋습니다 %.
Aaron Thoma

25

때로는 플러그인이 간단한 문제에도 매력적인 솔루션이 될 수 있습니다. 이 경우 전능하신 Tim Pope의 eunuch.vim 이 있기 때문에 운이 좋습니다 .

eunuch.vim 은 그 자체로

가장 필요한 UNIX 쉘 명령 용 Vim sugar. 버퍼와 기본 파일을 동시에 삭제하거나 이름을 바꿉니다. 로드findlocate빠른 수정 목록에 또는 a 를 합니다. 등등.

완전한. 필요한 기능과 UNIX 시스템을 사용하는 경우 몇 가지 추가 도구가 있습니다.

찾고있는 명령은

:Remove!

다시 한 번, 많이 필요한 경우 다시 매핑하십시오 :nnoremap <Leader>rm :Remove!<CR>.


플러그인없이 할 수있는 방법을 찾고 있었으므로 다른 답변을 수락하겠습니다. 플러그인이 좋아 보입니다 :-)
fotanus

당신의 정력 방법이 필요하면이 플러그인은 매우 편리합니다 mv, mkdir, find, 등 매우 추천합니다.
Ehtesh Choudhury

4

나는 vim 내에서 파일을 삭제할 수 있다는 것을 좋아하지만, 어떤 이유로 든 아직 버전 제어가되지 않은 중요한 작업을 실수로 삭제하는 것에 대해서도 편집증이 있습니다. @glts 및 @accolade의 이전 정보를 vim을 종료하기 전에 명령을 사용하여 프롬프트 하는 방법에 대한 이 답변 을 결합하는 것이 유용하다는 것을 알았습니다 confirm.

이를 종합 ~/.vimrc하여 파일을 삭제하고 버퍼를 닫기 전에 메시지를 표시 하는 함수를 my에 추가 하고 키 조합에 매핑했습니다.

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()

fun! DeleteFileAndCloseBuffer()
  let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
  if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun

당신이 나보다 편집증이 적은 한 번의 키 스트로크라면 <CR>첫 줄에 추가 할 수 있습니다.

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>

리턴을 한 번만 누르면됩니다.


1
어쨌든 스크립트 expand('%:p')대신 사용하는 것이 좋습니다 @%. (내 힌트를 포함 시켜서 기쁘지만 :) 간결한 이점은 스크립트에서 미미합니다. 더 중요한 것은 %:p:) 파일 이름을 전체 절대 경로로 확장합니다 (아직 없을 수도 있음). 단지와 함께 %당신이 잊어 버린 경우, 대신에 다른 디렉토리에 같은 이름의 파일을 삭제하는 위험의 작은 실행 당신 :cd이 에드.
Aaron Thoma

1
감사합니다! 그에 따라 답변을 업데이트했습니다.
joelostblom

0

다음 두 단계로 수행 할 수 있습니다.

  1. 새 파일로 저장

    : w 새 파일 이름

  2. 이전 파일 삭제

    ! rm oldfilename


0

이것은 인기가없는 의견 일 수 있지만 파일 트리 탐색기 (Netrw / NerdTree)가 파일을 삭제하는 가장 간단하고 안전한 방법이 될 것입니다. OP가 NerdTree를 사용하지 않더라도 내장 플러그인 Netrw도 잘 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.