`:w !sudo tee %` 작동 방식

`:w !sudo tee %` 작동 방식

쓰기 권한이 없는 파일을 vim에서 연 다음 이를 변경해야 한다고 결정한 경우 vim을 종료하지 않고도 변경 사항을 쓸 수 있습니다. :w !sudo tee %
이것이 어떻게 작동하는지 이해할 수 없습니다. 이것을 분해할 수 있나요?
나는 이 :w부분을 이해합니다. 이미 연관된 파일 이름이 있다고 가정하고 현재 버퍼를 디스크에 씁니다. 맞습니까? 또한 명령이 실행되어 현재 버퍼 내용을 나타내는
것으로 알고 있습니다 . 그렇죠? 하지만 아직도 이것이 어떻게 작동하는지 이해하지 못합니다.!sudo tee%

답변1

구조는 :w !cmd"현재 버퍼에 쓰기"를 의미합니다.관로예를 들어, 이렇게 하면 :w !cat버퍼를 파이프할 수 있습니다 cat.

그것은%파일 이름버퍼와 연관됨

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

답변2

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

so :w !sudo tee %는 현재 버퍼를 sudo tee [currentfilename].

tee루트로 실행 중이므로 표준 입력을 파일에 저장할 수 있는 쓰기 권한이 있습니다.

당신은 또한 볼 수 있습니다https://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work

답변3

별로 옳지 않아요!

!command다음과 같이 명령을 실행하십시오.필터에서 텍스트를 가져오는 명령은 stdin일부 작업을 수행하고 로 출력합니다 stdout.

를 사용하면 w파일 내용 stdinsudo tee %. %현재 파일의 이름을 저장하는 vim의 특수 레지스터입니다.

그래서 당신은 파일 내용을 현재 파일로 푸시 sudo tee FILENAME합니다 .tee stdin

관련 정보