읽기 전용 파일로 변경 내용 차단


14

Vim을 사용하여 읽기 전용 파일을 편집하는 경우 처음 편집 할 때 경고 만 표시하지만 변경이 가능합니다. 이 동작은 다른 이름으로 파일을 저장하려는 사람에게 유용 할 수 있습니다. 그러나 때로는 쓰기 권한이없는 파일을 연 다음 잊어 버리고 변경합니다.

Vim이 파일을 볼 수있는 모드로 들어갈 수 있지만 변경하는 옵션은 차단할 수 있습니까?

답변:


13

해결책을 찾았습니다. 설정 nomodifiable하면 파일이 편집되지 않습니다 (도움말 창에서 사용됨). modifiableif readonly가 설정되어 있고 autocmd에 첨부되어 있는지에 따라 설정하거나 설정 해제하는 간단한 기능을 만들었습니다 .

" Don't allow editing of read only files
autocmd BufRead * call RONoEdit()

function! RONoEdit()
  if &readonly == 1
    set nomodifiable
  else
    set modifiable
  endif
endfunction

4
다음을 수행하여 더 짧게 만들 수 있습니다.let &modifiable = !&readonly
Martin Tournoij

@Carpetsmoker 하나의 라이너로 훨씬 좋습니다, 감사합니다! 그러나 여전히 다음과 autocmd BufRead * let &modifiable = !&readonly
같아야

이를 통해 readonly파일을 연 다음 새 버퍼를 만든 후에 새 버퍼가 종료됩니다 nomodifiable.
Praxeolitic

지적 해 주셔서 감사합니다. 새 버퍼를 테스트하는 방법을 잘 모르겠습니다.
ZeroKelvinKeyboard

1
@Praxeolitic : 방금 이 문제를 해결 해야하는 답변 을 게시 했습니다. 작동하는지 알려주세요.
s4y

7

이것을 .vimrc에 추가하십시오 :

autocmd BufRead * let &l:modifiable = !&readonly

이것은 현재 버퍼에만 영향을 미치는 @ZeroKelvinKeyboard의 답변을 기반으로합니다.
s4y

0

위의 답변이 정확하면 고려해야 할 또 다른 사항이 있습니다. 파일이 "읽기 전용"인 경우 파일 소유자가 아니거나 파일 소유자가 아닌 한 파일 내용을 변경할 수있는 방법이 없어야합니다. 해당 파일을 쓰기 가능하게 할 권리가 있습니다. 그리고 ": w!"로 "읽기 전용"상태를 명시 적으로 재정의하지 않으면 vim은 파일에 변경 사항을 쓰지 않습니다.

실제로 읽기 전용으로되어있는 파일을 편집 할 수 있으면 권한을 다시 확인하고 보안 구성이 잘못되었을 수 있습니다. vim에서 파일을 편집 할 수없는 경우에도 다른 편집 방법이 그대로 유지되므로 파일을 변경하지 않을 경우 권한이 올바르게 설정되어 있어야합니다. Windows에서는 모든 사람에 대한 변경 권한을 명시 적으로 거부하여 파일을 읽기 전용으로 만들 수 있습니다. Linux에서는 "불변"확장 속성 (chattr + i)을 사용할 수 있습니다.


2
내가 명확하지 않으면 죄송합니다. 이 질문은 실수로 읽기 전용 파일을 변경하는 것이 아닙니다. 쓰기 권한이없는 파일의 버퍼를 편집하지 못하게하고 싶었습니다. 때때로 실수로 시스템 구성 파일을 루트 사용자가 아닌 일반 사용자로 엽니 다. 이 경우 파일에 대한 쓰기 권한이 없으므로 버퍼는 읽기 전용으로 표시되지만 Vim은 여전히 ​​버퍼를 편집 할 수 있습니다. 저장하려고하면 쓰기 권한이 없기 때문에 저장할 수 없습니다. 이 경우 Vim이 버퍼 변경을 차단하기를 원했습니다.
ZeroKelvin 키보드

아, 알겠습니다 나는 당신이 이것을 안전 장치로 원한다는 생각을 얻었습니다. 내 대답을 무시하십시오 :)
mikky 2016 년

OP는 OS에서 읽기 전용이 아닌 파일을 열 때 현재 변경을 원하지 않거나 적절하게 고려하지 않고 자신을 제한하지 않으려는 것을 의미합니다. 나는 정확히 똑같은 생각을하고 있으므로 Google에서 여기에갑니다!
Violapterin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.