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
합니다.