`: w! sudo tee %`는 어떻게 작동합니까 수 없습니다. 당신은 이것을 해부 할

vim에 쓸 수있는 권한이없는 파일을 연 경우 변경해야한다고 결정하면 vim을 종료하지 않고 변경 내용을 작성할 :w !sudo tee %
수 있습니다.이 방법을 이해할 수 없습니다. 당신은 이것을 해부 할 수 있습니까?
나는 그 :w부분과 이미 관련된 파일 이름이 있다고 가정하고 현재 버퍼를 디스크에 씁니다.
또한 명령 !을 실행 하고 현재 버퍼 내용을 나타내는 것을 이해 합니까?
그러나 여전히 이것이 어떻게 작동하는지 이해하지 못합니다.sudo tee%



답변

구조 :w !cmd는 ” 명령을 통해 파이프 된 현재 버퍼 작성”을 의미 합니다. 예를 들어 :w !cat버퍼를 통해 파이프합니다 cat.

지금 %은 IS 파일명 버퍼와 관련이

따라서 :w !sudo tee %버퍼의 내용을 통해 파이프합니다 sudo tee FILENAME. 이것은 버퍼의 내용을 효과적으로 파일에 기록합니다.


답변

% 내용이 아니라 현재 버퍼의 파일 이름을 나타냅니다.

따라서 :w !sudo tee %현재 버퍼를에 파이프한다는 의미 sudo tee [currentfilename]입니다.

tee 루트로 실행 중이므로 stdin을 파일에 저장하는 쓰기 권한이 있습니다.

참조 https://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work


답변

별로야!

!command에서 명령을 필터 명령으로 실행하여 에서 텍스트를 가져 와서 stdin무언가를 수행하고에 출력합니다 stdout.

를 사용하여 w파일 내용을 stdin의 (으)로 푸시했습니다 sudo tee %. %vim의 특수 레지스터이며 현재 파일의 이름을 보유합니다.

따라서 파일 내용을 현재 파일로 sudo tee FILENAME푸시 tee stdin합니다.


답변