Vim හි නව රේඛාවක් මගින් චරිතයක් ප්‍රතිස්ථාපනය කරන්නේ කෙසේද


1975

,වත්මන් ගොනුවේ එක් එක් නව පේළියකින් ප්‍රතිස්ථාපනය කිරීමට මම උත්සාහ කරමි :

:%s/,/\n/g 

නමුත් එය පෙනෙන්නේ a ලෙසය ^@ සත්‍ය නව රේඛාවක් වෙනුවට . ගොනුව DOS මාදිලියේ හෝ වෙනත් කිසිවක් තුළ නොමැත.

මම කළ යුත්තේ කුමක් ද?

මා වැනි ඔබ කුතුහලයෙන් සිටී නම්, Vim සඳහා new ra නව රේඛාවක් වන්නේ මන්ද යන ප්‍රශ්නය පරීක්ෂා කරන්න. එසේම.


2
Stack Overflow යනු ක්‍රමලේඛන සහ සංවර්ධන ප්‍රශ්න සඳහා වන වෙබ් අඩවියකි. මෙම ප්‍රශ්නය මාතෘකාවෙන් බැහැරව පෙනෙන්නේ එය ක්‍රමලේඛනය හෝ සංවර්ධනය පිළිබඳ නොවන බැවිනි. උපකාරක මධ්‍යස්ථානයේ දී මට විමසිය හැකි මාතෘකා මොනවාදැයි බලන්න . සමහර විට සුපර් පරිශීලක හෝ යුනික්ස් සහ ලිනක්ස් ස්ටැක් එක්ස්චේන්ජ් ඇසීමට වඩා හොඳ ස්ථානයක් වනු ඇත.
jww

5
@jww මෙම ප්‍රශ්නය අවුරුදු 10 ක් පැරණි ... සංක්‍රමණය වීමට තරම් වයස නැති බව පෙනේ. මේ වගේ ප්‍රශ්න ගොඩක් තියෙනවා, උදාහරණයක් ලෙස: stackoverflow.com/questions/10175812/…
Vinko Vrsalovic

15
@jww vim යනු ක්‍රමලේඛකයින් සඳහා බහුලව භාවිතා වන මෙවලමක් වන අතර, ක්‍රමලේඛකයින් සඳහා බහුලව භාවිතා වන මෙවලම් පිළිබඳ ප්‍රශ්න ස්ටැක් පිටාර ගැලීමේ මාතෘකාව මත වේ . පැහැදිලිවම මෙය Vi සහ Vim මත වඩාත් සුදුසු වේ .
user202729

Answers:


2585

\rවෙනුවට භාවිතා කරන්න\n .

ආදේශ කිරීමෙන් \nපෙළට ශුන්‍ය අක්‍ෂරයක් ඇතුළත් කරයි. නව රේඛාවක් ලබා ගැනීමට, භාවිතා කරන්න \r. කෙසේ වෙතත්, නව රේඛාවක් සොයන විට , ඔබ තවමත් භාවිතා කරනු \nඇත. මෙම අසමමිතිය හේතුකොටගෙන බව නිසා ය \nසහ \r තරමක් වෙනස් දේවල් :

\nපේළියේ අවසානයට (නිව්ලයින්) \rගැලපෙන අතර, කරත්ත ප්‍රතිලාභයකට ගැලපේ. අනෙක් අතට, ආදේශක වලදී \nශුන්‍ය අක්‍ෂරයක් \rඇතුළු කරන අතර නව රේඛාවක් ඇතුල් කරයි (වඩාත් නිවැරදිව එය ආදානය ලෙස සලකනු ලැබේ <CR>). Vim විධාන රේඛා විශේෂාංගය භාවිතා කරමින් මෙය නිදර්ශනය කිරීම සඳහා කුඩා, අන්තර්ක්‍රියාකාරී නොවන උදාහරණයක් මෙන්න (වෙනත් වචන වලින් කිවහොත්, ඔබට එය ක්‍රියාත්මක කිරීම සඳහා පහත සඳහන් දෑ පර්යන්තයකට පිටපත් කර ඇලවිය හැකිය). xxdඑහි ප්‍රති ing ලයක් ලෙස ලැබෙන ගොනුවේ හෙක්ස්ඩම්ප් එකක් පෙන්වයි.

echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a                                bar.
After:
0000000: 000a 720a                                ..r.

වෙනත් වචන වලින් කිවහොත්, \nබයිට් 0x00 පා text යට ඇතුළත් කර ඇත; \r0x0a බයිට් ඇතුල් කර ඇත.


128
/ r යනු Enter / Return යතුර එබීම ලෙස සැලකේ. එය සියලු වේදිකාවල ක්‍රියාත්මක වේ.
ලූකා මරින්කෝ


14
මෙය සම්භාව්‍ය vi සඳහා වැඩ කිරීමට මම ප්‍රාර්ථනා කරමි. AIX v6.1 හි, මේ ආකාරයට \rක්‍රියා නොකරයි. නමුත් ඔබට Ctrl-V Enterයතුරු ලියනය වෙනුවට එබිය හැකි \rඅතර එය ක්‍රියාත්මක වේ.
eksortso

3
මම සාදයට පරක්කුයි. නම් \rරැසක් <CR>හා \nරැසක් ඇති ශූන්ය, කොහොමද මම carriage return යමක් වෙනුවට ද?
ලාමා

2
CR සනීරාජ් සීආර් සහ එල්එෆ් හි ඉතිහාසය ගැන ඔබට විශ්වාසද? මුලින් එල්එෆ් කඩදාසි එක් පේළියක් ඉදිරියට ගෙන ගිය නමුත් මුද්‍රණ ශීර්ෂය ගෙන නොගිය බවත්, සීආර් මුද්‍රණ ශීර්ෂය ගෙන ගිය නමුත් කඩදාසි චලනය නොකළ බවත් මට හැඟුණි. එහි ප්‍රති As ලයක් වශයෙන්, ඔබේ මෙහෙයුම් පද්ධතිය මුද්‍රණය කිරීමට පෙර ආදානය පරිවර්තනය නොකළේ නම්, නිවැරදි ප්‍රතිදානය ලබා ගැනීම සඳහා ඔබට LF හෝ CR පමණක් භාවිතා කළ නොහැක. එම්එස් ඩොස් විසින් අමු මුද්‍රණ දත්ත පෙළ ගොනු ආකෘතියක් ලෙසද, මැක් ඕඑස් සීආර් භාවිතා කළ අතර එයින් මුද්‍රණ යන්ත්‍රයේ අමු ආකෘතියටද යුනික්ස් එල්එෆ් භාවිතා කර මුද්‍රණ යන්ත්‍රයේ අමු ආකෘතියටද පරිවර්තනය කළේය.
මිකෝ රන්ටලයිනන්

210

මෙන්න උපක්රමය:

පළමුව, විශේෂ අක්ෂර සමඟ රටා ගැලපීමට ඉඩ දීම සඳහා ඔබේ Vi (m) සැසිය සකසන්න (එනම්: නව රේඛාව). මෙම රේඛාව ඔබේ .vimrc හෝ .exrc ගොනුවට දැමීම වටී:

:set magic

ඊළඟට, කරන්න:

:s/,/,^M/g

^Mචරිතය ලබා ගැනීම සඳහා Ctrl+ ටයිප් Vකර පහර දෙන්න Enter. වින්ඩෝස් යටතේ, කරන්න Ctrl+ Q, Enter. මට මේවා මතක තබා ගත හැකි එකම ක්‍රමය වන්නේ ඔවුන් කොතරම් අල්ප හැඟීමක් ඇතිද යන්න මතක තබා ගැනීමයි:

පිළිතුර: නව රේඛාවක් නිරූපණය කිරීම සඳහා භාවිතා කළ හැකි නරකම පාලන චරිතය කුමක්ද?

B: එක්කෝ q(සාමාන්‍යයෙන් එයින් අදහස් වන්නේ "ඉවත්ව යන්න" යන්නයි) හෝ වැරදීමකින් + vටයිප් කර සංස්කාරකය kill ාතනය කිරීම පහසු නිසා .CtrlC

පිළිතුර: ඒක කරන්න.


9
මම වින්ඩෝස් හි GVim භාවිතා කරන අතර මට :set magic(එය මගේ ~ / _vimrc හි නොමැත) හෝ අවශ්‍ය නොවේ ctrl-q. සරල ලෙස ctrl-vඇතුලත් කිරීමෙන් පසුව ^Mමට චරිතය මනාව නිර්මාණය වේ.
ක්‍රිස් ෆිලිප්ස්

5
Cv නව රේඛාවක් නියෝජනය නොකරයි; එය "ඊළඟ වචනාර්ථයෙන් ගැලවීම" විධානයයි. සීවී යනු කුමක් සඳහාද යන්න මට මතක නැත, නමුත් එය නව රේඛාවට මානසිකව සිතියම් ගත නොකිරීමට හේතුවක් තිබේ.
ජිම් ස්ටුවර්ට්

27
Ctrl-v යනු "වාචික" සඳහා වූ සිහිවටනයකි - එනම් ඊළඟ යතුර එහි "වාචික" යතුරු කේතය / අක්ෂරයට එබීමෙන් ගැලවීම. වින්ඩෝස් වල එය අලවන්න: දේවල් හුරුපුරුදු ලෙස තබා ගැනීමට. Ctrl-Q යනු "(un) Quote" සඳහා විය හැකිය. තරමක් මෝඩය, කෙසේ වෙතත් - නමුත් ඔබට එය ද්විමය ලිපිගොනු වල භාවිතා කළ හැකිය - උදා: Ctrl-Z හරහා Ctrl-Z හරහා සෙවීම (Ascii 1-26 මම අනුමාන කරමි).
ටොමාස් ගන්ඩෝර්

1
Ctrl-Cඇත්ත වශයෙන්ම සංස්කාරකය kill ාතනය නොකරයි, එය ඔබව සාමාන්‍ය ප්‍රකාරයට අවලංගු කළ හැකි වුවද. Ctrl-Vයන්නෙන් අදහස් කරන්නේ වාචික, සහ Ctrl-Qයමෙකු $VIMRUNTIME/mswin.vimවින්‍යාස ගොනුව පූරණය කිරීමේ වැරැද්ද කර ඇති බවයි . ඔබට mswin අවශ්‍ය නොවේ. ඒ වෙනුවට ඔබේම vimrc භාවිතා කරන්න.
00dani

වාව් ---- මෙය පුදුම සහගතය. මම මේ වෙනකම් කළා sed -n l . එය ඉතා පහසුවෙන් කළ හැකි බව දැන ගැනීම Ctrl-vසතුටක්.
arpit

98

වාක්‍ය ඛණ්ඩය තුළ s/foo/bar, \rසහ \nසන්දර්භය අනුව වෙනස් අර්ථයන් ඇත.


කෙටි:

සඳහා foo:

line n = නව රේඛාව (ලිනක්ස් / මැක් මත එල්එෆ්, වින්ඩෝස් හි සීආර් + එල්එෆ්)
\ r = ප්‍රවාහනය ආපසු (CR)

සඳහා bar:

line r = යනු නව රේඛාවයි
\ n = ශුන්‍ය බයිට්.

දිගු (ASCII අංක සමඟ):

NUL= 0x00 = 0 = Ctrl+ @
LF= 0x0A = 10 = Ctrl+ J
CR= 0x0D = 13 = Ctrl+M

ASCII පාලන අක්ෂර ලැයිස්තුව මෙන්න . Ctrl+ V, Ctrl+ හරහා Vim හි ඒවා ඇතුළත් කරන්න---key--- .

Bash හෝ වෙනත් යුනික්ස් / ලිනක්ස් ෂෙල් වෙඩි තුළ Ctrl+ ටයිප් කරන්න---key--- .

Bash හි Ctrl+ උත්සාහ කරන්න M. එය පහර දීම හා සමානයිEnterලිනක්ස් පද්ධති රේඛා සීමා කිරීම සඳහා රේඛීය සංග්‍රහ භාවිතා කළද, ෂෙල් එකෙහි තේරුම වටහා ගත් පරිදි එය වේ.

වචනයේ පරිසමාප්ත අර්ථයෙන්ම ඇතුල් කිරීමට, ඒවා Ctrl+ සමඟ සූදානම් කරන්නV ද ක්‍රියා කරයි.

Bash වලින් උත්සාහ කරන්න:

echo ^[[33;1mcolored.^[[0mnot colored.

මෙය ANSI ගැලවීමේ අනුක්‍රම භාවිතා කරයි . + ^[හරහා දෙදෙනා ඇතුල් කරන්න ,CtrlVEsc .

ඔබට Ctrl+ V, Ctrl+ M, ද උත්සාහ කළ හැකිය Enter, මෙය ඔබට මෙය ලබා දෙනු ඇත:

bash: $'\r': command not found

මතක තබා ගන්න \rඉහළින් ? :>

මෙම ASCII පාලන අක්ෂර ලැයිස්තුව සම්පූර්ණ ASCII සංකේත වගුවකට වඩා වෙනස් වන අතර , පාලක අක්ෂර, කොන්සෝලය / ව්‍යාජ ටර්මිනල් / Vim හරහා ඇතුළු කරනු ලැබේ.Ctrl යතුර (හහා) එහි සොයාගත හැකිය.

සී සහ වෙනත් බොහෝ භාෂාවලින් ඔබ සාමාන්‍යයෙන් මෙම 'අක්‍ෂර' නිරූපණය කිරීම සඳහා අෂ්ටක කේත භාවිතා කරයි.

මේ සියල්ල පැමිණෙන්නේ කොහෙන්දැයි ඔබට දැන ගැනීමට අවශ්‍ය නම්: TTY අවලංගු කරන ලදි . මෙම මාතෘකාව පිළිබඳව ඔබට හමුවන හොඳම සබැඳිය මෙයයි, නමුත් පරෙස්සම් වන්න: මකරුන් සිටින්න.


ටීඑල්; ඩී.ආර්

සාමාන්යයෙන් foo= \n, සහ bar= \r.


1
ඉතින් ඔබ කුතුහලය දනවන
කරුණක්

2
ode කෝඩ්ෂොට් :s/x/^M/gකළ යුතුය. ඇතුල් කරන ^Mහරහා ctrl-vවිසින් අනුගමනය ctrl-m.
sjas

3
ස්තූතියි sjas, ඔබ දන්නවා මෙම ප්‍රශ්නය සෑම විටම අමුතුම එකක් බව. පිළිතුර සඳහා ඡන්ද 1008 ක් මූලික වශයෙන් "විම් ඔබ සොයාගත් දේ කරයි. එයට හේතුව විම් ඔබ සොයාගත් දේ කරයි. විම් ඔබ සොයාගත් දේ කරන බව කිසි විටෙකත් අමතක නොකරන්න." රටාවේ සිත්ගන්නාසුලු චරිත සඳහා කේත ලැයිස්තුවක් සොයා ගැනීමට මම බලාපොරොත්තු වෙමි, ප්‍රතිස්ථාපනය සහ අමුතුකමට හේතුව ඒ නිසා වෙනත් සමාන අමුතුකම් මතක තබා ගැනීමට සහ පුරෝකථනය කිරීමට පහසුය. ඒකෙන් මගේ ඡන්දය ලැබෙන්න තිබුණා.
codeshot

oc කේත සටහන ascii පාලන අක්ෂර ලැයිස්තුවක් ඔබට උදව් වනු ඇත. වැඩි විස්තර සඳහා cs.tut.fi/~jkorpela/chars/c0.html බලන්න . සබැඳි දෙකක් ඇතුළත් කිරීමට මම මගේ පිළිතුර යාවත්කාලීන කරමි.
sjas

56

ඔබ භාවිතා කිරීමට අවශ්‍යයි:

:%s/,/^M/g

වෙත ලබා ගැනීමට ^Mචරිතය, මාධ්ය Ctrl+ vඅනුගමනය Enter.


4
C M අක්‍ෂරය ලබා ගැනීමට මට <Cv> <Cm> කළ යුතුය.
ජෙසන් තෝමස්


25

වින්ඩෝස් හි Vim සමඟ, Ctrl+ Qවෙනුවට Ctrl+ භාවිතා කරන්න V.


16

මා සිතන ආකාරයට මෙය හොඳම පිළිතුරයි, නමුත් එය වගුවක වඩා හොඳ වනු ඇත:

Vim සඳහා new ra නව රේඛාවක් වන්නේ ඇයි?

ඉතින්, නැවත ලිවීම:

රීජෙක්ස් ප්‍රතිස්ථාපනයකදී \rරේඛීය සංග්‍රහයක් (ASCII 0x0A, යුනික්ස් නිව්ලයින්) භාවිතා කිරීමට ඔබ භාවිතා කළ යුතුය , නමුත් එය ප්‍රතිස්ථාපනය සඳහා සුවිශේෂී වේ - ඔබ සාමාන්‍යයෙන් \nරේඛීය පෝෂණය සහ \rප්‍රවාහනය සඳහා භාවිතා කිරීම අපේක්ෂා කළ යුතුය .

මෙයට හේතුව NIM \nඅක්ෂරය (ASCII 0x00) යන්න අර්ථ දැක්වීම සඳහා විම් ආදේශකයක් භාවිතා කිරීමයි . රේඛීය පෝෂණය සඳහා එහි සුපුරුදු භාවිතය සඳහා නොමිලේ NIL \0ඒ වෙනුවට ලැබෙනු ඇතැයි ඔබ බලාපොරොත්තු වන්නට ඇත \n, නමුත් \0දැනටමත් රීජෙක්ස් ප්‍රතිස්ථාපනය සඳහා අර්ථයක් ඇත, එබැවින් එය වෙත මාරු කරන ලදි \n. එබැවින් නව රේඛාව සිට මාරුවීම සඳහා තවදුරටත් ඉදිරියට යනු \nඇත \r(එය රීජෙක්ස් රටාවකින් කරත්ත ආපසු යැවීමේ චරිතය වන ASCII 0x0D).

චරිතය | ASCII කේතය | සී නිරූපණය | රීජෙක්ස් තරගය | රීජෙක්ස් ප්රතිස්ථාපනය
------------------------- + ------------ + ----------- ------- + ------------- + ------------------------
නිල් | 0x00 | \ 0 | \ 0 | \ n
පේළි සංග්‍රහය (යුනික්ස් නිව්ලයින්) | 0x0a | \ n | \ n | \ r
ප්‍රවාහනය ආපසු | 0x0d | \ r | \ r | <unknown>

සැ.යු: ^M( ලිනක්ස් හි Ctrl+ V Ctrl+ M) අනෙක් අය උපදෙස් දී ඇති පරිදි කරත්ත ආපසු යැවීමට වඩා රීජෙක්ස් ආදේශනයකදී නව රේඛාවක් ඇතුළත් කරයි (මම එය උත්සාහ කළෙමි).

Vim විසින් එහි ගොනු ආකෘති සැකසීම් මත පදනම්ව ගොනු සුරැකීමේදී රේඛා පෝෂණ අක්‍ෂරය පරිවර්තනය කරන බවත් එය කරුණු ව්‍යාකූල කළ හැකි බවත් සලකන්න.


11

සිට එක්ලිප්ස් , එම ^Mචරිත රේඛාවක් තුළ ගිල්ලවා කළ හැකි අතර, ඔබ හිස් පේලි ගැන ඔවුන් බවට පරිවර්තනය කිරීමට අවශ්ය.

:s/\r/\r/g

8

නමුත් යමෙකු ආදේශ කළ යුතු නම්, පහත සඳහන් දේ ක්‍රියාත්මක වේ:

:%s/\n/\r\|\-\r/g

ඉහත දැක්වෙන පරිදි, සෑම ඊළඟ පේළියක්ම ඊළඟ පේළිය සමඟ ආදේශ කරනු ලැබේ, පසුව |-නැවත නැවතත් නව පේළියක්. මෙය විකී වගු වල භාවිතා වේ.

පෙළ පහත පරිදි නම්:

line1
line2
line3

එය වෙනස් කර ඇත

line1
|-
line2
|-
line3

6

ඔබට එය සම්පූර්ණ ගොනුවක් සඳහා කිරීමට අවශ්‍ය නම්, විධාන රේඛාවෙන් උත්සාහ කළ හැකි බව ද මට යෝජනා කරන ලදී:

sed 's/\\n/\n/g' file > newfile

1
මේ සඳහා GNU sed අවශ්‍ය බව සලකන්න. printf 'foo\\nbar\n' | sed 's/\\n/\n/g'එය ඔබේ පද්ධතියේ ක්‍රියාත්මක වේදැයි බැලීමට උත්සාහ කරන්න . (මෙම යෝජනාව සඳහා #bash හි ෆ්‍රෙනෝඩ් හි හොඳ අයට ගෞරවය.)
ඉවාන්

ඔව්, නමුත් ප්‍රශ්නය වූයේ විම් ගැන ය. Stack Overflow ප්‍රශ්නයක් ඇත sed භාවිතා කරමින් නව රේඛාවක් (\ n) ප්‍රතිස්ථාපනය කරන්නේ කෙසේද? .
පීටර් මෝර්ටෙන්සන්

5

මෙන්න මට වැඩ කළ පිළිතුර. මෙම පුද්ගලයාගෙන්:

---- උපුටා දැක්වීම වෙනුවට නව පේළියක් ඇතුළත් කිරීමට vi සංස්කාරකය භාවිතා කරන්න


මට කළ යුතු තවත් දෙයක් මතක තබා ගත නොහැකි අතර පසුව සොයා බැලිය යුතුය.

Vi හි, සෙවුමක නව රේඛා අක්ෂරයක් ඇතුළු කර ප්‍රතිස්ථාපනය කිරීමට, පහත සඳහන් දේ කරන්න:

:%s/look_for/replace_with^M/g

ඉහත විධානය මඟින් “look_for” හි සියලු අවස්ථා “replace_with \ n” සමඟ ආදේශ කරනු ඇත (line n නව රේඛාව සමඟ).

“^ M” ලබා ගැනීම සඳහා, යතුරු සංයෝජනය Ctrl+ ඇතුළත් කරන්න V, ඉන්පසු (සියලු යතුරු මුදා හරින්න) Enterයතුර ඔබන්න.


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.