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


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.