VIM으로 새 파일을 작성할 때 권한 비트 유지


8

Vim에서을 사용하여 현재 버퍼의 사본을 새 파일 :w [filename]에 쓰면 Vim 이 새 파일에 대한 기본 (즉, umask 또는 기타로 설정) 파일 권한을 사용하는 것으로 보입니다. 그러나 현재 파일이 기존 파일에서로드 된 경우 "올바른"동작이 해당 파일 의 권한을 복제하지 않아야 합니까? 예를 들어, 실행 파일을 편집하고 파일의 새 사본을 작성하는 경우 Vim이 새 실행 파일을 작성하지 않는 이유는 무엇입니까? Vim ! chmod --reference % [newfilename]이 새 파일을 작성한 후 와 같은 작업을 수행하는 것 외에 내가 설명하는 방식대로 작동하도록 할 수 있습니까?



대답은 이미 질문에 있다고 생각합니다. 매크로 또는 키 바인딩을 작성해야 chmod합니다. AFAIK, vim에는이 기능이 내장되어 있지 않습니다.
Kevin Panko

답변:


3

이런 식으로 할 수 있습니다. 먼저 원본 파일의 이름을 캡처하십시오.

au BufRead * let b:oldfile = expand("<afile>")

그런 다음 새 파일을 저장할 때 해당 권한을 원본 파일의 권한과 동일하게 변경하십시오.

au BufWritePost * if exists("b:oldfile") | let b:newfile = expand("<afile>") | if b:newfile != b:oldfile | echo system("chmod --reference=".b:oldfile." ".b:newfile) | endif |endif

두 자동 명령을 ~ / .vimrc에 넣으십시오.


이 대답은 굉장합니다,하지만 난 하나의 제안이 : 변화 echo system(에 등 silent echo system(이이 중지 "를 눌러 계속 ENTER"방지 등.
Kyle Strand

@KyleStrand : call system(...디스플레이에 아무것도 인쇄하지 않도록 할 수 있었지만 명령이 자동으로 실패하는 문제를 피하려고했습니다. 그것이 실패하지 않을 것이라고 생각하지 않거나 성가신보다는 때때로 실패하는 경우 Press ENTER..., 나는 당신의 제안에 동의합니다. 그러나 더 좋은 해결책은 system ()의 출력을 캡처하고 비어 있지 않은 경우에만 에코하는 함수를 작성하는 것입니다. 나는 플러그인에서 그것을했고 꽤 잘 작동합니다.
garyjohn

충분합니다. 나는 vimscript를 전혀 잘 이해하지 못하기 때문에 그것이 작동하는지 확인하기 위해 "자동"에 갇혀 있었고 괜찮은 것처럼 보였을 때 .vimrc를 그대로 두었습니다. Press ENTER,그래도 지속성에 가끔 실패하는 것을 선호하므로을 고수 silent하거나 사용할 것이라고 생각 합니다 call. 제안에 다시 한번 감사드립니다!
Kyle Strand

0

파일에 저장되지 않은 변경 사항이 없는지 확인한 후 cp사본을 작성하는 데 사용하십시오. 원본과 동일한 권한을 가진 사본이 생성됩니다.

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