Vi භාවිතා කර ගොනුවක ඇති සියලුම පේළි මකා දැමිය හැක්කේ කෙසේද?


286

Vi භාවිතා කර ගොනුවක ඇති සියලුම පේළි මකා දැමිය හැක්කේ කෙසේද?

මේ මොහොතේ මම එය කරන්නේ ගොනුවක ඇති සියලුම පේළි ඉවත් කිරීමට මෙවැනි දෙයක් භාවිතා කරමිනි:

echo > test.txt

භාවිතයෙන් සියලුම රේඛා මකා දැමිය හැක්කේ කෙසේද vi?

සටහන: භාවිතා ddකිරීම හොඳ විකල්පයක් නොවේ. බොහෝ රේඛා තිබිය හැකිය.


5
මම හිතන්නේ ඩීජී වැඩ කළ යුතුයි.
මැඩ්ටක්ස්

11
AdMadTux, ඔබ පළමු පේළියෙන් ආරම්භ කළහොත් පමණි. 1GdGඕනෑම තැනක සිට වැඩ කරයි.
හොලොවේ

1
echo | test.txttest.txtක්‍රියාත්මක කළ හැකි පිටපතක් මිස වලංගු විධානයක් නොවේ . මම හිතන්නේ echo >test.txtඒ වෙනුවට ඔබ අදහස් කළේ ?
ත්‍රිත්ව

ඔබ හරි @tripleee
සීතල

5
භාවිතා නොකිරීමvi , >test.txtඑය ශුන්‍ය දිගට කපා දැමීමට ප්‍රමාණවත් බව සලකන්න - echoඅවශ්‍ය නොවේ.
abligh

Answers:


503

දී viකරන්නද

:1,$d

සියලුම පේළි මකා දැමීමට.

මෙම :විධාන හඳුන්වා දෙයි (සහ පහළ එෙකහි).
මෙම 1,$වන රේඛා, පහත සඳහන් විධානය පිළිබඳ මිනුමක් (වේ d) මත වැඩ කළ යුතුයි. මෙම අවස්ථාවේ දී පළමු පේළියේ සිට අවසාන පේළිය දක්වා පරාසය (ඇඟවුම් කර $ඇති බැවින් ලේඛනයේ පේළි ගණන දැන ගැනීමට ඔබට අවශ්‍ය නැත).
අවසාන dදැක්වෙන්නේ දැක්වෙන රේඛා මකා දැමීමයි.

කෙටි ආකාරයක් ඇත ( :%d) නමුත් මම එය කිසි විටෙකත් භාවිතා නොකරන බව පෙනේ. මෙම :1,$dවඩා පහසුවෙන් කළ හැකි උදා: කිරීමට "අනුවර්තනය" :4,$-2dඉතිරි මකා, පිටත් පළමු 3 සහ පසුගිය 2 රේඛා පමණි.


12
හිතකර උපදෙස්. තවත් නැතESC+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd...
මැට් බෝර්ජා

2
command rdev5 .ඊළඟ වතාවේ විධානයක් පුනරාවර්තනය කිරීමට උත්සාහ කරන්න
Gazihan Alankus

185

Vi හි මම භාවිතා කරමි

:%d

කොහෙද

  • : vi ට විධාන ප්‍රකාරයට යන්න කියනවා
  • % සියලු රේඛා අදහස් වේ
  • d : මකන්න

විධාන රේඛාවේ,

> test.txt

එසේම කරනු ඇත.

Dd සමඟ ඇති ගැටළුව කුමක්ද?

dd if=/dev/null of=test.txt

කොහෙද

  • /dev/null විශේෂ 0 බයිට් ගොනුවකි
  • if ආදාන ගොනුව වේ
  • of ouput ගොනුව වේ

මම සිතුවේ ddගොනුවේ සෑම පේළියකටම මට pess අවශ්‍ය බවයි.
සීතල

යහපත. එය මා බලාපොරොත්තු වූවාට වඩා සරලයි ...
සීතල

11
ඔබ උදාහරණයක් ලෙස දෙන ddvi විධානය (OP අදහස් කළ) සහ ddඋපයෝගීතාව අතර වෙනස හඳුනාගත යුතුය . එසේම, > test.txtබාෂ් නොවන ෂෙල් වෙඩි (උදා: zsh) හි අපේක්ෂිත පරිදි ක්‍රියා නොකරනු ඇත.
අවලංගු කරන්න

1
ep ඩෙප්ක්විඩ් අපොයි! දැන් මම ඒ ගැන හිතන්න ආවා ...
ආකේමාර්

2
නැතහොත් : >test.txtඑය ඉතා සුළු වශයෙන් දිගු වේ.
ත්‍රිත්ව

55

ඔබ මෙය කරන ලෙස මම නිර්දේශ කරමි (ඕනෑම POSIX- අනුකූල කවචයක වැඩ කළ යුතුය):

> test.txt

ඔබට එය vi සමඟ කිරීමට අවශ්‍ය නම්, ඔබට මෙය කළ හැකිය:

  • 1G (පළමු පේළියට යන්න)
  • dG (අවසාන පේළියට මකන්න)

30
Old කෝල්ඩ්: ... වරක්?
ක්‍රිස් ඩවුන්

5
Gඅවසාන පේළිය නියෝජනය කරයි. ඔබ පළමු පේළියේ ( gg) සිටී නම්, dGvi ට වත්මන් පේළියේ (පළමු පේළියේ) සිට අවසාන පේළිය දක්වා සියලුම රේඛා ඉවත් කරන ලෙස පවසයි. ඉතින්, ඔබ එය එක පහරකින් කරන්න.
unxnut

6
ggවිශේෂිත වේ. එය 1Gසාම්ප්‍රදායික vi.
ස්ටෙෆාන් චසෙලාස්

1
ඔබේ ෂෙල් සින්ටැක්ස් සමහර ෂෙල් සඳහා වින්‍යාසය මත රඳා පවතී. එම විධානය ලැබීමෙන් පසු bash සහ zsh (පෙරනිමියෙන් zsh) අන්තර්ක්‍රියාකාරී කවච වලට STDIN ආදානය සඳහා රැඳී සිටිය හැකි අතර ගොනුව සත්‍ය වශයෙන්ම ඉවත් කිරීමට අමතර <CTRL> + D අවශ්‍ය වේ. එය ක්‍රියාත්මක කිරීමේ හැකියාව CLOBBER සැකසුම් මත ද රඳා පවතී. >| test.txt < /dev/nullඑය තරමක් ශක්තිමත් බැවින් එය සෑම විටම ගොනුව වසා තබන අතර අන්තර්ක්‍රියාකාරී පර්යන්තවල ආදානය සඳහා බලා සිටීම වළක්වනු ඇත.
කාලෙබ්

1
Ale කාලෙබ්: මම කීවාක් මෙන්, ඕනෑම පොසික්ස් අනුකූල කවචයක. :-) මෙම අවස්ථා දෙකෙන් එකක්වත් POSIX- පැමිණිලි නොවේ.
ක්‍රිස් ඩවුන්

30

ඔබේ කර්සරය පළමු පේළියේ තිබේ නම් (එසේ නොවේ නම්, ටයිප් කරන්න: ggහෝ 1G), එවිට ඔබට භාවිතා කළ හැකිය dG. එය වත්මන් පේළියේ සිට ගොනුවේ අවසානය දක්වා සියලුම රේඛා මකා දමනු ඇත. එබැවින් ඔබ ගොනුවේ ඇති සියලුම පේළි මකාදැමීමට වග බලා ගැනීම සඳහා, ඔබට දෙකම එකට මිශ්‍ර කළ හැකිය, ඒවා වනුයේ: ggdG(විධාන ප්‍රකාරයේදී).

හෝ %dEx ප්‍රකාරයේදී, විධාන රේඛා උදාහරණය : vim +%d foo.bar.

ආශ්‍රිත: වත්මන් පේළියේ සිට ගොනුවේ අවසානය දක්වා සියලුම පෙළ VIM හි මකා දැමිය හැක්කේ කෙසේද?


3
1 ට වඩා ergonomic වීම සඳහා +1: $ d. කොලොන් ටයිප් කිරීම සඳහා අපගේ ඇඟිලි කම්බි වී නැති බව නොවේ, කෙසේ වෙතත්;)
ආරොන් ආර්.

2
ඉහළට. dGමම නිතරම භාවිතා කරන්නේ එයයි.
lunchmeat317

1
මම මෙය ( ggdG) පහසුම ක්‍රමය ලෙස සොයා ගතිමි. මෙම පිළිතුර අනෙක් අය මෙන් ඉහළ නැංවීමට හේතුව ggපිරිසිදු vi හි නොපවතිනද ?
තමීර

එවැනි ලෙස, ඔබ විසින් ගොනු මුදුනේ දැනටමත් ඔබ අකමැති නම් පාඨමාලාව වෙනත් සමාන වෙනස්කම් වේ 1GdGහෝ Gd1G. නමුත් ඔබ භාවිතා කරන්නේ නම් vim, ggdGටයිප් කිරීමට පහසුම වේ.
jrw32982 මොනිකා

27

මම කම්මැලි මචන්, මම එය සරලව තබා ගැනීමට කැමතියි. ggdGඇතුළු යතුරු පහක් වේShift

ggගොනුවේ පළමු පේළියට යයි, dඑය dඑලේට් ක්‍රියාපදයේ ආරම්භය Gවන අතර ගොනුවේ පහළට යාමට චලනය වේ. වාචිකව, එය ගොනුවේ ආරම්භයට ගොස් ටයිල් එක අවසන් වන තෙක් සියල්ල මකා දමන්න.


rsrs. මමත් කම්මැලි සහ භාවිතා කරන :$dහෝ :1,$dවේගවත්ම ක්‍රමය (මම අඩු අක්ෂර ලියමි) kkk
සීතල

3
:%dහොඳ විකල්පයක් වන්නේ ඔබ යතුරු එබීම් 5 ක් පමණක් භාවිතා කරන බැවිනි.
ටැන්කර්ස්මාෂ්

2
AnkTankorSmash ggයනු vimවිධානයකි, නැත vi.
kyrias

හොඳ ඇල්ලීම, මගේ වැරැද්ද
ටැන්කර්ස්මාෂ්

12

ගොනුවේ ආරම්භයට ගොස් ඔබන්න dG.


5

මම නිතරම භාවිතා කරමි ggVG

  • gg වත්මන් සංස්කරණ ගොනුවේ ආරම්භයට පැනීම
  • V(කැපිටල් v) වත්මන් රේඛාව තෝරයි. මෙම අවස්ථාවේදී වත්මන් සංස්කරණ ගොනුවේ පළමු පේළිය
  • G(කැපිටල් g) ගොනුවේ අවසානයට පනින්න. මෙම අවස්ථාවේ දී, මම පළමු පේළිය තෝරාගත් බැවින්, Gමෙම ගොනුවේ සම්පූර්ණ පා select ය තෝරා ගනු ඇත.

එවිට ඔබට සියලු පේළි ඔබන්න dහෝ xමකා දැමිය හැකිය .


ඔබ dසිරස් අතට භාවිතා කරන්නේ නම් , එය ස්වයංක්‍රීයව රේඛීයව අදාළ වේ. නිදසුනක් ලෙස, dlඅක්ෂරයක් දකුණට djමකා දමයි, පේළියක් පහළට මකා දමයි.
ටැන්කර්ස්මාෂ්

4

තවත් විසඳුමක්:

truncate -s 0 file

වඩා සරල නැත >fileනමුත් හරි.
phk

1
හොඳ ක්‍රමයක් ලෙස පෙනේ, නමුත් ඉලක්කය එය කරන්නේ vi භාවිතා කරමිනි. Tks
සීතල

3

ඔබේ ප්‍රශ්නයේදී, echo > test.txtහිස් ගොනුවක් නොව තනි පේළියක් සහිත ගොනුවක් නිර්මාණය කරන බව සලකන්න .

කවචයේ සිට, භාවිතා කිරීම echo -n > test.txtහෝ සලකා බලන්න : > test.txt.

මම සාමාන්‍යයෙන් vi editing විධානයක් භාවිතා කරන අතර (මම භාවිතා කරමි ggdG), ඔබට වර්තමාන ගොනුව වෙත යොමු කිරීමක් සමඟ කවචයට ඇමතිය හැකිය:

:!:>%

එය සංක්ෂිප්ත ggdG, නමුත් ටයිප් කිරීමට අපහසුය, තවද ඔබට නවීකරණය කරන ලද ගොනුව නැවත පූරණය කිරීමට අවශ්‍ය බව ඔබ විසින් සනාථ කළ යුතුය, එබැවින් මම මේ අවස්ථාවේ දී එය විශේෂයෙන් නිර්දේශ නොකරමි, නමුත් vi වෙතින් ෂෙල් විධාන භාවිතා කරන්නේ කෙසේදැයි දැන ගැනීම ප්‍රයෝජනවත්.

එය බිඳ දැමීම:

  • : vi විධානයක් ආරම්භ කරන්න
  • ! shell විධානයක් ආරම්භ කරන්න
  • : මෙය හිස් නිමැවුමක් සහිත ෂෙල් බිල්ඩින් විධානයකි
  • > ප්‍රතිදානය නැවත හරවා යැවීම
  • % vi මෙය වත්මන් ගොනුවේ නම සමඟ ආදේශ කරයි

යෝජිත දේ :1,$dඇත්තෙන්ම හොඳ එකක් වන අතර, මම එහි සිටින විටද එය තිබේ1GdG


1
:!:>%viකවචයේ ගොනු නාමයෙන් ගැලවී නොයන බැවින් එය ද භයානක ය ( $(reboot)නිදසුනක් ලෙස හැඳින්වෙන ගොනුවක් සංස්කරණය කිරීමේදී එය නොකරන්න ). ඔබට යමක් අවශ්‍ය වනු ඇත:call system(":>" . shellescape(expand("%")))
ස්ටෙෆාන් චසෙලාස්


-1

පේළි විශාල සංඛ්‍යාවක් මකා දැමීමට ඔබට උපක්‍රමයක් භාවිතා කළ හැකිය. ඔබ ඇතුළු කිරීමේ මාදිලියේ නොමැති බවට වග බලා ගන්න (ESC ඔබන්න) ඉන්පසු 1000dd ටයිප් කරන්න.


1
විධානය කරන්නේ කුමක්ද / එය ක්‍රියාත්මක වන්නේ කෙසේද යන්න පිළිබඳ පැහැදිලි කිරීම ඔබ ඇතුළත් කළ යුතුය (ඊළඟ පේළි 1000 මකා දමයි, කර්සරය පළමු පේළියේ නොමැති නම් සියලු රේඛා මකා නොදමනු ඇත).
සෙබස්ත්

මේ නිසා මම එය උපක්‍රමයක් ලෙස හැඳින්වුවෙමි :)
රාඩු

-1

මම ggපේළි මුදුනට ලඟාවීමට ටයිප් කර a කරන්න 100 dd. මෙය දර්ශකයේ ඉහළ පේළියට දර්ශකය ගෙන එන අතර එතැන් සිට පේළි 100 ක් ඉවත් කරයි. ගොනුව දිගින් වැඩි නම් තවත් පේළි එක් කිරීමට ඔබට අංකය වෙනස් කිරීමට සිදු විය හැකිය.


-1
> file.txt

ඔබට සැබවින්ම අවශ්‍ය නම් මිස vi විවෘත කිරීමට අවශ්‍ය නැත.


1
ආයුබෝවන්, යූ ඇන්ඩ් එල් තොග හුවමාරු අඩවියට සාදරයෙන් පිළිගනිමු. මෙම වෙබ් අඩවිය වඩාත් හොඳින් පළ කරන්නේ කෙසේද යන්න පිළිබඳ තොරතුරු සඳහා කරුණාකර උපකාරක මධ්‍යස්ථානය සමාලෝචනය කරන්න . මෙම වෙබ් අඩවියේ තොරතුරු සහ අද්විතීය ප්‍රශ්න සහ පිළිතුරු වගා කිරීමට අපට අවශ්‍යය. ඔබගේ පිළිතුර මෙම ලිපියේ වෙනත් පිළිතුරු හා අදහස් වලට සමාන වේ. කරුණාකර වඩාත් සුවිශේෂී හා තොරතුරු සහිත පිළිතුරක් වීමට කරුණාකර ඔබගේ ලිපිය සංස්කරණය කරන්න. ඔබට ස්තුතියි!
kemotep

ඊට අමතරව, ප්‍රශ්නයේ කාරණය වන්නේ ... "vi භාවිතා කිරීම"
ජෙෆ් ෂලර්

ඔබ යෝජනා කළ ආකාරයටම මම උත්සාහ කළෙමි. මට ලැබුණා bash: > file.txt: command not found.
රෝයිමා

aroaima ඔබ එය උපුටා දක්වන්නේ නම් ඔබට එය ලැබෙනු ඇත "> file.txt".
කුසලානන්ද

1
@JeffSchaller : vi >file.txt ;-)
Kusalananda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.