ฉันรู้เพียงหนึ่งอินสแตนซ์โดยใช้รีจิสเตอร์คือผ่านCtrlR*ฉันวางข้อความจากคลิปบอร์ด
การใช้งานอื่น ๆ ของการลงทะเบียนมีอะไรบ้าง วิธีใช้งาน
ทุกสิ่งที่คุณรู้เกี่ยวกับการลงทะเบียน VI (ให้ความสำคัญกับ vi 7.2) - แบ่งปันกับเรา
ฉันรู้เพียงหนึ่งอินสแตนซ์โดยใช้รีจิสเตอร์คือผ่านCtrlR*ฉันวางข้อความจากคลิปบอร์ด
การใช้งานอื่น ๆ ของการลงทะเบียนมีอะไรบ้าง วิธีใช้งาน
ทุกสิ่งที่คุณรู้เกี่ยวกับการลงทะเบียน VI (ให้ความสำคัญกับ vi 7.2) - แบ่งปันกับเรา
คำตอบ:
การลงทะเบียนในกลุ่มให้คุณเรียกใช้การกระทำหรือคำสั่งเกี่ยวกับข้อความที่เก็บไว้ภายใน ในการเข้าถึงการลงทะเบียนให้คุณพิมพ์"a
คำสั่งก่อนหน้าซึ่งa
เป็นชื่อของการลงทะเบียน หากคุณต้องการคัดลอกบรรทัดปัจจุบันลงในทะเบียนk
คุณสามารถพิมพ์
"kyy
หรือคุณสามารถต่อท้ายทะเบียนโดยใช้อักษรตัวใหญ่
"Kyy
จากนั้นคุณสามารถเลื่อนดูเอกสารและวางไว้ที่อื่นโดยใช้
"kp
เพื่อวางจากคลิปบอร์ดของระบบบน Linux
"+p
หากต้องการวางจากคลิปบอร์ดของระบบบน Windows (หรือจากคลิปบอร์ด "ไฮไลต์เมาส์" บน Linux)
"*p
ในการเข้าถึงประเภทการลงทะเบียนที่กำหนดไว้ในปัจจุบันทั้งหมด
:reg
"+
เป็นทะเบียนพิเศษที่อ้างอิงถึงคลิปบอร์ดของระบบ
"*
; "*yG
ดังนั้นคำสั่งเพื่อคัดลอกจนถึงจุดสิ้นสุดของแฟ้มจะกลายเป็น
*
เป็นคลิปบอร์ด "mouse highlight" และ+
เป็นคลิปบอร์ด Ctrl-XCV
+
) หรือไม่?
ฉันยินดีเมื่อฉันค้นพบการ0
ลงทะเบียน หากคุณดึงข้อความโดยไม่ต้องกำหนดให้กับการลงทะเบียนโดยเฉพาะข้อความนั้นจะถูกกำหนดให้กับการ0
ลงทะเบียนเช่นเดียวกับการบันทึกไว้ในการ"
ลงทะเบียนเริ่มต้น ความแตกต่างระหว่าง0
และ"
ลงทะเบียนคือการที่0
มีประชากรเพียงมีข้อความกระชากขณะที่ลงทะเบียนเริ่มต้นที่มีประชากรยังมีข้อความที่ถูกลบโดยใช้d
/ D
/ x
/ X
/ c
/ C
/ s
/ S
คำสั่ง
ฉันพบว่ามีประโยชน์เมื่อฉันต้องการคัดลอกข้อความลบบางสิ่งและแทนที่ด้วยข้อความที่คัดลอก ขั้นตอนต่อไปนี้แสดงตัวอย่าง:
y[motion]
- ข้อความนี้ถูกบันทึก"
และ0
ลงทะเบียนd[motion]
- ข้อความนี้ถูกบันทึกในการ"
ลงทะเบียน"0p
โดยที่"
คำสั่งให้ใช้ register สำหรับคำสั่งถัดไป
ในขั้นตอนสุดท้ายถ้าคุณจะวางจากการลงทะเบียนเริ่มต้น (ด้วยp
) มันจะใช้ข้อความที่คุณเพิ่งลบ (อาจไม่ใช่สิ่งที่คุณตั้งใจ)
โปรดทราบว่าp
หรือP
วางจากการลงทะเบียนเริ่มต้น ระยะยาวเทียบเท่าจะเป็น""p
(หรือ""P
) และ"0
ถือเอาไว้ล่าสุด"1
ถือถือเป็นลบหรือเปลี่ยนแปลงล่าสุด
:help registers
สำหรับข้อมูลเพิ่มเติมโปรดดูที่
p
หรือP
วางจากการลงทะเบียนเริ่มต้น ระยะยาวเทียบเท่าจะเป็น""p
(หรือ""P
)
"
คือคำสั่งให้ใช้การลงทะเบียนสำหรับคำสั่งถัดไป ดังนั้น""p
จะใช้การ"
ลงทะเบียนสำหรับคำสั่งวางและ"0p
จะใช้การ0
ลงทะเบียน
0p
จะหมายถึงไปที่ตัวอักษรตัวแรกของบรรทัดปัจจุบันและวางจากเนื้อหาของการลงทะเบียนเริ่มต้น ( "
) "p
จะเป็นคำสั่งที่ไม่สมบูรณ์เนื่องจากคุณจำเป็นต้องระบุว่าคำสั่งที่จะใช้ลงทะเบียนp
สำหรับ
หนึ่งในส่วนที่ฉันชอบเกี่ยวกับการลงทะเบียนคือการใช้มันเป็นมาโคร!
สมมติว่าคุณกำลังจัดการกับไฟล์ค่าที่คั่นด้วยแท็บเช่น:
ID Df %Dev Lambda
1 0 0.000000 0.313682
2 1 0.023113 0.304332
3 1 0.044869 0.295261
4 1 0.065347 0.286460
5 1 0.084623 0.277922
6 1 0.102767 0.269638
7 1 0.119845 0.261601
ตอนนี้คุณตัดสินใจว่าคุณจะต้องเพิ่มเครื่องหมายเปอร์เซ็นต์ที่ส่วนท้ายของฟิลด์% Dev (เริ่มจากบรรทัดที่ 2) เราจะสร้างมาโครแบบง่ายในการm
ลงทะเบียน(เลือกโดยพลการ) ดังนี้:
กด:: qm
เพื่อเริ่มการบันทึกแมโครภายใต้การm
ลงทะเบียน
EE
: ไปที่ท้ายคอลัมน์ 3
a
: โหมดแทรกเพื่อต่อท้ายคอลัมน์นี้
%
: พิมพ์เครื่องหมายเปอร์เซ็นต์ที่เราต้องการเพิ่ม
<ESC>
: กลับสู่โหมดคำสั่ง
j0
: ไปที่จุดเริ่มต้นของบรรทัดถัดไป
q
: หยุดการบันทึกมาโคร
ตอนนี้เราสามารถพิมพ์@m
เพื่อเรียกใช้แมโครนี้ในบรรทัดปัจจุบัน นอกจากนี้เราสามารถพิมพ์@@
ทำซ้ำหรือ100@m
ทำสิ่งนี้ได้ 100 ครั้ง! ชีวิตดูดีทีเดียว
ณ จุดนี้คุณควรจะพูดว่า " แต่ต้องรอการตรวจสอบนี้มีอะไรที่เกี่ยวข้องกับการลงทะเบียน "
จุดที่ดีเยี่ยม ลองตรวจสอบสิ่งที่อยู่ในเนื้อหาของการลงทะเบียนโดยการพิมพ์m
"mp
จากนั้นเราจะได้รับดังต่อไปนี้:
EEa%<ESC>j0
ตอนแรกดูเหมือนว่าคุณจะเปิดไฟล์ไบนารีในแผ่นจดบันทึกโดยไม่ได้ตั้งใจ แต่เมื่อเหลือบดูครั้งที่สองมันเป็นลำดับอักขระที่แน่นอนในมาโครของเรา!
คุณเป็นคนที่อยากรู้อยากเห็นจึงขอทำสิ่งที่น่าสนใจและแก้ไขบรรทัดของข้อความนี้ไปใส่แทนน่าเบื่อเก่า!
%
EEa!<ESC>j0
จากนั้นของัดนี้ลงทะเบียนโดยการพิมพ์n
B"nyE
ถ้าอย่างนั้นเรามาเรียกใช้n
แมโครบนบรรทัดข้อมูลของเราโดยใช้@n
....
OMG มันเพิ่ม !
โดยพื้นฐานแล้วการเรียกใช้แมโครนั้นเหมือนกับการกดลำดับที่แน่นอนของคีย์ในการลงทะเบียนของแมโครนั้น หากนั่นไม่ใช่เคล็ดลับการลงทะเบียนที่ยอดเยี่ยมฉันจะกินหมวกของฉัน
+
แทนj0
เพื่อไปที่อักขระที่ไม่ใช่ช่องว่างแรกในบรรทัดถัดไป
การลงทะเบียนที่มีประโยชน์อื่น ๆ :
"*
หรือ"+
- เนื้อหาของคลิปบอร์ดของระบบ
"/
- คำสั่งค้นหาล่าสุด
":
- คำสั่งสุดท้าย
หมายเหตุด้วย vim macros คุณสามารถแก้ไขได้เนื่องจากเป็นเพียงรายการของการกดแป้นที่ใช้เมื่อบันทึกแมโคร ดังนั้นคุณสามารถเขียนไปยังแฟ้มข้อความแมโคร (ใช้"ap
ในการเขียนแมโคร) และแก้ไขพวกเขาและโหลดลงทะเบียนกับ วิธีที่ดีในการจัดเก็บมาโครที่มีประโยชน์"ay$
vim --version
- -clipboard
หมายความว่าคุณไม่มี+clipboard
หมายความว่าคุณทำ
"*
และ"+
เย็นกว่า: "+
วางข้อความสุดท้ายที่คัดลอกด้วยctrl+c
(บัฟเฟอร์การคัดลอก) หรือทางลัดที่คุณใช้ (หรือright-click>copy
) "*
วางข้อความสุดท้ายที่ไฮไลต์ด้วยเมาส์ (บัฟเฟอร์การเลือก) ดังนั้นหากคุณคัดลอกบางสิ่งด้วยctrl+c
และจากนั้นไฮไลท์อย่างอื่นด้วยเมาส์คุณสามารถเลือกที่จะวาง สิ่งนี้ไม่สามารถใช้งานได้ใน Windows โดยที่รีจิสเตอร์ทั้งสองนี้ตรงกัน
"*
และ"+
ปี! ฉันคิดว่ามีเพียง gvim เท่านั้นที่สามารถเข้าถึงคลิปบอร์ดของระบบได้ แต่ดูเหมือนว่ากลุ่มปกติก็ทำเช่นกัน!
-xterm_clipboard
vim --version
แพคเกจใด ๆ ที่ง่ายต่อการติดตั้ง? (เดเบียน / apt-get) ขอบคุณ
การลงทะเบียนหลุมดำ _
นั้นเป็นการ/dev/null
ลงทะเบียน
ฉันใช้ใน vimrc ของฉันเพื่ออนุญาตให้ลบอักขระเดียวโดยไม่ต้องอัปเดตค่าเริ่มต้น:
noremap x "_x
และวางในโหมดภาพโดยไม่ต้องอัพเดตการลงทะเบียนเริ่มต้น:
vnoremap p "_dP
x
ลดความยุ่งยากในการแปลงอักขระ
x
คุณจะไม่สามารถทำxp
คำสั่ง "" อีกต่อไป"เพื่อสลับกระแสกับตัวอักษรถัดไป มีประโยชน์มากสำหรับการแก้ไขข้อผิดพลาด นอกจากนี้เรายังต้องXp
สลับกระแสกับตัวอักษรก่อนหน้า
<C-r><registerletter>
หากคุณเคยต้องการที่จะวางเนื้อหาของการลงทะเบียนในคำสั่งอดีตโหมดการตี
ทำไมคุณจะใช้สิ่งนี้ ฉันต้องการค้นหาและแทนที่สตริงที่มีความยาวดังนั้นฉันเลือกมันในโหมดภาพเริ่มพิมพ์นิพจน์การค้นหา / แทนที่:%s/[PASTE YANKED PHRASE]//g
และไปในวันของฉัน
หากคุณต้องการวางคำเพียงคำเดียวในโหมด ex ให้แน่ใจว่าเคอร์เซอร์อยู่ที่คำนั้นก่อนที่จะเข้าสู่โหมด ex จากนั้นกดปุ่ม<C-r><C-w>
เมื่ออยู่ในโหมด ex เพื่อวางคำ
:
บรรทัดคำสั่งเป็นสิ่งที่ดีที่สุดที่ฉันเรียนรู้ในวันนี้
/[write out your regex]<cr>
s/<C-R>//replacement/
วิธีนี้คุณจะได้รับประโยชน์จากฟีดแบ็กสด ๆ บน regex ของคุณก่อนที่จะทำการแทนที่
ฉันคิดว่ากูรูลับการลงทะเบียนคือการแสดงออก = ลงทะเบียน สามารถใช้สำหรับการจับคู่โฆษณา
:inoremap \d The current date <c-r>=system("date")<cr>
คุณสามารถใช้ร่วมกับระบบของคุณดังกล่าวข้างต้นหรือรับการตอบสนองจากฟังก์ชั่น VimL ที่กำหนดเอง ฯลฯ
หรือเพียงแค่สิ่งที่เฉพาะกิจเช่น
<c-r>=35+7<cr>
เคล็ดลับสุดยอดคือการใช้"1p
เพื่อวางการลบ / เปลี่ยนแปลงครั้งล่าสุด (และจากนั้นใช้.
ซ้ำ ๆ เพื่อวางการลบถัดไปในคำอื่น ๆ"1p...
โดยทั่วไปเทียบเท่ากับ"1p"2p"3p"4p
เป็นพื้นเทียบเท่ากับ
คุณสามารถใช้สิ่งนี้เพื่อเรียงลำดับบรรทัดกลับด้าน:
dddddddddd"1p....
จากหน้าความช่วยเหลือของ vim:
CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
Insert the contents of a numbered or named register. Between
typing CTRL-R and the second character '"' will be displayed
<...snip...>
Special registers:
'"' the unnamed register, containing the text of
the last delete or yank
'%' the current file name
'#' the alternate file name
'*' the clipboard contents (X11: primary selection)
'+' the clipboard contents
'/' the last search pattern
':' the last command-line
'-' the last small (less than a line) delete
'.' the last inserted text
*c_CTRL-R_=*
'=' the expression register: you are prompted to
enter an expression (see |expression|)
(doesn't work at the expression prompt; some
things such as changing the buffer or current
window are not allowed to avoid side effects)
When the result is a |List| the items are used
as lines. They can have line breaks inside
too.
When the result is a Float it's automatically
converted to a String.
See |registers| about registers. {not in Vi}
<...snip...>
nmap <F2> @q
ผมใช้ลงทะเบียน Q แล้วเพราะจะบันทึกแมโครสำหรับ F2 qq
เพื่อเล่นผมเพียงแค่กด บันทึกและเล่นซ้ำแมโครอย่างรวดเร็ว
ฉันใช้การลงทะเบียนเริ่มต้นเพื่อ grep สำหรับข้อความในหน้าต่าง vim ของฉันโดยไม่ต้องเข้าถึงสำหรับเมาส์
:!grep "<CTRL-R>0"<CR>
การใช้งานที่ลงทะเบียนในคำสั่ง@
ด้วย เช่น:
echo @a
echo @0
echo @+
ตั้งไว้ในคำสั่ง:
let @a = 'abc'
ตอนนี้จะวาง"ap
abc
แหล่งใหญ่ของความสับสนคือการลงทะเบียนเริ่มต้น "
แหล่งใหญ่ของความสับสนคือการลงทะเบียนเริ่มต้นมันเป็นสิ่งสำคัญที่จะรู้วิธีการทำงาน มันจะดีกว่าถ้าหลีกเลี่ยงการลงทะเบียนเริ่มต้นบ่อยครั้งที่สุด คำอธิบายจากเอกสาร Vim:
Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g. "xdd). This is like the unnamed register is pointing
to the last used register.
ดังนั้นการลงทะเบียนเริ่มต้นเป็นตัวชี้ไปยังการลงทะเบียนที่ใช้ล่าสุด เมื่อคุณลบหรือดึงบางสิ่งบางอย่างลงทะเบียนนี้จะชี้ไปที่การลงทะเบียนอื่น ๆ คุณสามารถทดสอบได้โดยการตรวจสอบการลงทะเบียน มีการลงทะเบียนอีกครั้งที่เหมือนกับการลงทะเบียนเริ่มต้นเสมอ: การลงทะเบียน yank ("0
), ลบการลงทะเบียนครั้งแรก ( "1
), ลบการลงทะเบียนขนาดเล็ก ( "-
) หรือการลงทะเบียนอื่น ๆ ที่ใช้ในการลบหรืองัด
ข้อยกเว้นเพียงอย่างเดียวคือการลงทะเบียนหลุมดำ Vim doc พูดว่า:
An exception is the '_' register: "_dd does not store the deleted text in any
register.
โดยปกติแล้วคุณจะดีกว่ามากโดยใช้โดยตรง: "0
, "-
และการ"1-"9
ลงทะเบียนเริ่มต้นหรือการลงทะเบียนชื่อ
หนึ่งการลงทะเบียนที่ถูกมองข้ามคือ '.' dot register ซึ่งมีข้อความที่แทรกล่าสุดไม่ว่าจะแทรกอย่างไรเช่น ct] (เปลี่ยนจนถึง]) จากนั้นคุณจะรู้ว่าคุณต้องแทรกมันไว้ที่อื่น แต่ไม่สามารถใช้วิธีการทำซ้ำแบบจุด
:reg .
:%s/fred/<C-R>./
การลงทะเบียนที่ฉันชอบคือการ':'
ลงทะเบียน การทำงาน@:
ในโหมดปกติทำให้ฉันสามารถทำซ้ำคำสั่ง ex ก่อนหน้านี้ที่รันได้
เพื่อนของฉัน Brian ได้เขียนบทความเกี่ยวกับเรื่องนี้ ฉันคิดว่ามันเป็นคำแนะนำที่ดีเกี่ยวกับวิธีใช้หัวข้อ https://www.brianstorti.com/vim-registers/