සුඩෝ සමඟ vim විවෘත කිරීමට ඔබට අමතක වූ විට පවා, මූල අවසරය අවශ්ය ගොනුවක ලිවීමට ඔබට ඉඩ දෙන විධානය ඔබ බොහෝ දෙනෙක් දැක ඇති:
:w !sudo tee %
කාරණය නම් මෙහි හරියටම සිදුවෙමින් පවතින දේ මට නොලැබීමයි.
මම දැනටමත් මෙය හදුනාගෙන ඇත:
wමේ සඳහා ය
*:w_c* *:write_c*
:[range]w[rite] [++opt] !{cmd}
Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.
එබැවින් එය සියලු රේඛා සම්මත ආදානය ලෙස පසු කරයි.
මෙම !sudo teeකොටස සිටී teeපරිපාලක වරප්රසාද හිමි.
සියල්ලන්ටම අර්ථවත් කිරීම සඳහා, %ගොනු නාමය ප්රතිදානය කළ යුතුය (සඳහා පරාමිතියක් ලෙස tee), නමුත් මෙම හැසිරීම සඳහා උපකාරය පිළිබඳ සඳහනක් මට සොයාගත නොහැක.
tl; dr මෙම විධානය විසුරුවා හැරීමට යමෙකුට මට උදව් කළ හැකිද?
sudoඅදාළ වේ cat, නමුත් එසේ නොවේ >, එබැවින් එයට අවසර නැත. ඔබට සම්පූර්ණ විධානයම සුඩෝ උප කුලකයකින් ධාවනය කිරීමට උත්සාහ කළ හැකිය :w !sudo sh -c "cat % > yams.txt", නමුත් එය ක්රියා නොකරනු ඇත, මන්ද උපසිරැසියෙහි %එය නිල් ය; ඔබ ඔබේ ගොනුවේ අන්තර්ගතය හිස් කරයි.
:w !sudo sh -c "cat >%"ඇත්ත වශයෙන්ම ක්රියා sudo tee %කරන්නේ Vim විසින් ගොනු නාමය උපසෙල් වෙත %පැමිණීමට පෙර ආදේශ කරන බැවිනි . කෙසේ වෙතත්, ගොනු නාමයේ අවකාශයක් තිබේ නම් ඒ දෙකම ක්රියා නොකරයි; ඔබ කළ යුත්තේ :w !sudo sh -c "cat >'%'"හෝ :w !sudo tee "%"එය නිවැරදි කිරීමයි.
:w !sudo cat > %ක්රියා නොකරනු ඇති අතර සම්මත ප්රතිදානය දූෂණය නොකරන්නේද?