ฉันจะย้ายไปยังจุดสิ้นสุดบรรทัดใน Vim ได้อย่างไร


1192

ฉันรู้วิธีย้ายไปรอบ ๆ ในโหมดคำสั่งโดยเฉพาะการกระโดดไปที่บรรทัดเป็นต้น แต่คำสั่งใดที่จะข้ามไปยังจุดสิ้นสุดของบรรทัดที่ฉันยังอยู่


19
คำสั่ง vim พื้นฐานครอบคลุมในเวลาน้อยกว่า 10 นาทีyoutube.com/watch?v=71YTkxUNwmg
eomeroff

14
เกิดอะไรขึ้นถ้าใช้ vimtutor ไปสองสามนาที? มันเป็นส่วนหนึ่งของการติดตั้ง Vim ของคุณแล้วและแสดงให้คุณเห็นพื้นฐาน
dash-tom-bang

@ dash-tom-bang พวกเขาได้คะแนนสูงมากที่นี่ ... :) แต่ใช่คุณพูดvimtutorถูก อาจเป็นไปได้ว่าพวกเขาไม่รู้เกี่ยวกับมัน?
Pryftan

คำตอบ:


2050

เพียงแค่คีย์$ (เครื่องหมายดอลลาร์) คุณสามารถใช้Aเพื่อเลื่อนไปยังจุดสิ้นสุดของบรรทัดและเปลี่ยนเป็นโหมดแก้ไข (ผนวก) จะกระโดดอักขระที่ไม่ว่างเปล่าสุดท้ายคุณสามารถกดgแล้ว_ปุ่ม

ตรงกันข้ามAคือI(โหมดแทรกที่จุดเริ่มต้นของบรรทัด) เป็นส่วน ๆ การกดปุ่ม^จะเป็นการวางเคอร์เซอร์ของคุณที่อักขระที่ไม่ใช่ white-space แรกของบรรทัด


81
ข้ามไปยังไม่ว่างสุดท้ายg_
SergioAraujo

2
บางครั้งมีประโยชน์มากกว่าg_รูปแบบที่ไม่รวมอักขระว่าง
rogercampos

6
ตัวแปร _g มีประโยชน์จริง ๆ เมื่อทำงานในโหมดภาพเนื่องจากช่วยให้คุณใช้บรรทัดได้โดยไม่ต้องขึ้นบรรทัดใหม่ในตอนท้าย
เกร็กร็อบบินส์

2
ในขณะที่บ้านและที่ทำงาน End ปุ่มบนแป้นพิมพ์ปกติ $ และ ^ มีความจำเป็นเมื่อคุณกำลังใช้แล็ปท็อป :)
Sridhar Sarnobat

คุณควรเพิ่ม ^ ลงในรายการ
Tek

304

อย่างที่ผู้คนมากมายพูดว่า:

  • $ พาคุณไปจนสุดสาย

แต่ยัง:

  • ^หรือ_พาคุณไปที่อักขระที่ไม่ใช่ช่องว่างตัวแรกในบรรทัดและ
  • 0(ศูนย์) พาคุณไปที่จุดเริ่มต้นของบรรทัดรวม ช่องว่าง

ฉันรู้ พาเราไปที่จุดเริ่มต้นของบรรทัด แต่ฉันไม่ได้ตระหนักถึง 0 ดังนั้นทั้ง 0 และ | ทำสิ่งเดียวกันใช่
Kamran Bigdely

8
@kami: ในขณะที่คำอธิบายแตกต่างกันพวกเขาดูเหมือนจะทำงานเหมือนกัน อย่างไรก็ตาม|คำสั่งpipe สามารถนับได้เช่น 3 | เพื่อข้ามไปยังคอลัมน์ที่สาม
Paul Ruane

136
  • $ ย้ายไปที่อักขระตัวสุดท้ายของบรรทัด
  • g _ ไปที่อักขระที่ไม่ใช่ช่องว่างสุดท้าย

  • g $ ไปที่จุดสิ้นสุดของบรรทัดหน้าจอ (เมื่อบรรทัดบัฟเฟอร์ถูกล้อมรอบหลายบรรทัดหน้าจอ)


ฉันรู้สึกเหมือน g_ เป็นสิ่งเดียวกับ $ b
Dave Aaron Smith เมื่อ

3
@DaveAaronSmith: bไปที่จุดเริ่มต้นของคำก่อนหน้าซึ่งไม่เหมือนกันเลย $geมันเป็นประมาณเทียบเท่ากับ
Paul Ruane

9
ฉันใช้_และg_สำหรับ visual / yanking เช่นเดียวกับ$จะคัดลอก / ลบอักขระบรรทัดใหม่ (LN)
เออร์เนสต์

สำหรับฉัน $ จะไปยังจุดสิ้นสุดของบรรทัดหน้าจอปัจจุบัน (เมื่อถูกรวมแล้ว) ฉันไม่สามารถหาสาเหตุได้ g_เป็นวิธีเดียวที่ฉันพบว่าไปถึงจุดสิ้นสุดจริงของบรรทัด
ezuk

@ezuk $ไปที่จุดสิ้นสุดของบรรทัดแม้ว่าจะห่อให้ฉันก็ตาม ฉันรู้ว่าไม่มีการตั้งค่าเพื่อปรับพฤติกรรมของมัน บางทีอาจเป็นเพราะคุณ. vimrc เชื่อมต่อใหม่g$หรือ
Paul Ruane

66

คำถามหลัก - จุดสิ้นสุดของบรรทัด

$ ไปที่ท้ายบรรทัดยังคงอยู่ในโหมดคำสั่ง

A ไปที่จุดสิ้นสุดของบรรทัดสลับไปยังโหมดแทรก

ตรงกันข้าม - จุดเริ่มต้นของบรรทัด (โดยเทคนิคคืออักขระที่ไม่ใช่ช่องว่างตัวแรก)

^ ไปที่จุดเริ่มต้นของบรรทัดยังคงอยู่ในโหมดคำสั่ง

I (i ตัวพิมพ์ใหญ่ i) ไปที่จุดเริ่มต้นของบรรทัดสลับไปยังโหมดแทรก

เพิ่มเติม - จุดเริ่มต้นของบรรทัด (โดยเทคนิคคอลัมน์แรกโดยไม่คำนึงถึงช่องว่าง )

0 (ศูนย์) ไปที่จุดเริ่มต้นของบรรทัดยังคงอยู่ในโหมดคำสั่ง

0i (ศูนย์ตามด้วยตัวพิมพ์เล็ก i) ไปที่จุดเริ่มต้นของบรรทัดสลับไปยังโหมดแทรก

สำหรับผู้ที่เริ่มต้นเรียนรู้ vi ต่อไปนี้เป็นคำแนะนำที่ดีสำหรับ vi โดยการแสดงรายการคำสั่งเคียงข้างกับการเคลื่อนย้ายเคอร์เซอร์และปุ่มลัดของ Windows GUI Editor โดยทั่วไป

เครื่องมือแก้ไข vi สำหรับผู้ใช้ Windows


3
อะนาล็อกถึงIไม่ใช่0แต่^เป็นทั้งสองอย่างIและ^ไปที่อักขระที่ไม่ใช่ช่องว่างตัวแรกของบรรทัด แต่0ไปที่คอลัมน์ศูนย์ (ตามที่ชื่อบอกเป็นนัย)
wchargin

@wchargin จริงคิดว่าฉันไม่สามารถหาสิ่งที่อะนาล็อกของ0จะเป็นอย่างไร (ไปที่ตัวอักษรตัวแรก (= คอลัมน์ 0) ของสายและไปที่โหมดแทรก)
franssu

@franssu: 0iเพียงคนเดียวที่ฉันรู้คือ :-)
wchargin

@wchargin - ขอบคุณสำหรับความถูกต้องทางเทคนิค ฉันได้อัปเดตโพสต์แล้ว
ap-osd

42

หากบรรทัดปัจจุบันของคุณล้อมรอบหน้าจอที่มองเห็นได้บนบรรทัดถัดไปคุณสามารถใช้g $เพื่อไปยังจุดสิ้นสุดของบรรทัดหน้าจอ


3
ฉันเพิ่งค้นพบคำสั่งขึ้นและลงล่วงหน้าด้วยgทำให้ vim ย้ายเคอร์เซอร์ที่อิงกับหน้าจอแทนที่จะเป็นบรรทัด เช่นgjและgkอนุญาตให้คุณเลื่อนขึ้นและลงบนเส้นยาว มีประโยชน์จริงๆ
Druckles

1
นอกจากนี้ยังพบว่าการพิมพ์ gw และบางสิ่งบางอย่างดูเหมือนจะเปลี่ยนjและkอย่างถาวรเพื่อทำตัวเป็นแบบนี้ ไม่แน่ใจว่าเป็นเพราะอะไร มีใครอธิบายเรื่องนี้ได้บ้าง
Druckles

4
@ ข้อผิดพลาด: บิตของการตอบช้า แต่ถ้าคุณยังคงสงสัย (หรือถ้าใครอื่นอ่านนี่คือ) gwและgqเป็นคำสั่งที่ฟอร์แมตข้อความ (ดู:h gwและ:h gq) สิ่งที่อาจเกิดขึ้นคือคุณทำgw{motion}และเปลี่ยนแปลงข้อความบางส่วนเพื่อให้เส้นหน้าจอตรงกับบรรทัดจริง
pandubear


13

ในหลายกรณีเมื่อเราอยู่ในสตริงเราจะถูกล้อมรอบด้วยเครื่องหมายคำพูดคู่หรือในขณะที่เขียนคำสั่งเราไม่ต้องการที่จะกดหลบหนีและไปที่จุดสิ้นสุดของบรรทัดนั้นด้วยปุ่มลูกศรและกดเครื่องหมายอัฒภาค ( ;) เพียงเพื่อสิ้นสุด เส้น. เขียนบรรทัดต่อไปนี้ในไฟล์vimrcของคุณ:

imap <C-l> <Esc>$a

สายพูดว่าอะไร? มันแม็พ Ctrl + l กับชุดคำสั่ง มันเทียบเท่ากับคุณกดEsc(โหมดคำสั่ง), $(จุดสิ้นสุดของบรรทัด), a(ผนวก) ในครั้งเดียว


ขอบคุณสำหรับสิ่งนั้น ฉันต้องการเพิ่ม Ctrl-e กลับไปที่เสียงเรียกเข้าของฉันเนื่องจากไปที่จุดสิ้นสุดของบรรทัดเหมือนบนเครื่องแรกของฉันและไม่รู้วิธี
tristanbailey

1
ตามคำตอบที่ยอมรับคุณสามารถกด A เพื่อทำสิ่งเดียวกัน
trysis

4
@trysis คุณเข้าใจผิดนี่ไม่ได้ขยับไปจากโหมดแก้ไขซึ่งค่อนข้างดี
Marconi

2
คุณถูก. vimแน่นอนช่วยให้คุณทำมากขึ้นในเวลาน้อยลงด้วยสิ่งต่าง ๆ เช่นนี้ @razorxpress จะมีการปรับเล็กน้อยimap <C-l> <Esc>Aซึ่งทำให้ Ctrl + l เทียบเท่ากับการกดEsc(ออกจากโหมดแทรก) จากนั้นA(ต่อท้ายจนจบบรรทัด)
trysis

3
ฉันคิดว่าแผนที่ที่เป็นไปได้มากกว่านี้น่าจะเป็นไปได้inoremap <C-l> <C-o>A
bennyty

12

ข้อดีของปุ่ม 'End' คือสามารถใช้งานได้ทั้งโหมดปกติและโหมดแทรก

'$' ใช้งานได้ในโหมดปกติ / คำสั่งเท่านั้น แต่ยังใช้งานได้ในเครื่องมือแก้ไข vi คลาสสิก (ควรรู้เมื่อไม่มีเสียงเรียกเข้า)


38
สิ่งที่คุณแขวนรอบแทรกโหมดสำหรับ! ไม่มีพลเมืองที่ดีคนธรรมดาไปที่นั่นหลังจากเวลากลางวัน คุณรู้ว่าเกิดอะไรขึ้นในนั้นใช่มั้ย รหัสหายไปตรงนั้นใช่มั้ย มันจะหายไปและจะไม่ได้ยินอีกเลย
โกง

3
ขอบคุณสำหรับสิ่งที่ฉันชอบที่จะอยู่ในโหมดแทรกเมื่อฉันได้เข้ามา น่าเสียดายที่แล็ปท็อปของฉันไม่มีปุ่มวางสาย :(
เรย์

12

นอกจากนี้ยังทราบความแตกต่างระหว่างบรรทัด (หรือบางทีอาจจะสายกายภาพ) และสายหน้าจอ บรรทัดถูกยกเลิกโดยอักขระ End Of Line ("\ n") บรรทัดหน้าจอคือสิ่งที่เกิดขึ้นที่จะแสดงเป็นอักขระหนึ่งแถวในเทอร์มินัลหรือในหน้าจอของคุณ ทั้งสองแยกออกจากกันหากคุณมีเส้นทางกายภาพยาวกว่าความกว้างหน้าจอซึ่งเป็นเรื่องปกติมากเมื่อเขียนอีเมลและเช่นนั้น

ความแตกต่างปรากฏขึ้นในคำสั่งท้ายบรรทัดเช่นกัน

  • $และ0เลื่อนไปยังจุดสิ้นสุดหรือจุดเริ่มต้นของสายกายภาพหรือย่อหน้าตามลำดับ:
  • g$และg0เลื่อนไปยังจุดสิ้นสุดหรือจุดเริ่มต้นของบรรทัดหน้าจอหรือย่อหน้าตามลำดับ

หากคุณชอบพฤติกรรมที่ตามหลังมาตลอดคุณสามารถทำการแมปกุญแจดังนี้:

:noremap 0 g0
:noremap $ g$

1
จะไปยังช่องว่างที่ไม่ใช่ช่องว่างสุดท้ายของบรรทัดได้อย่างไร (ไม่ว่าจะเป็นหน้าจอหรือสายกายภาพ)
Kamran Bigdely

g_เป็นช่องว่างทางกายภาพของบรรทัดสุดท้าย วิธีการเกี่ยวกับสายหน้าจอ?
trysis


9

หรือมีคำตอบที่ชัดเจน: ใช้Endปุ่มเพื่อไปยังจุดสิ้นสุดของบรรทัด


1
ใช่แล้วเทอร์มินัล mac เป็นสิ่งที่ฉันสังเกตเห็นว่ามีการขโมยกุญแจและไม่ผ่านมันไปยังสิ่งต่าง ๆ ที่วิ่งอยู่ภายในเครื่อง หนึ่งในสิ่งที่ทำให้ฉันรำคาญเมื่อใดก็ตามที่ฉันใช้ mac สักพัก
davr

จุดรวมของการใช้เสียงเรียกเข้าไม่จำเป็นต้องใช้ปุ่มอย่าง 'สิ้นสุด' ไม่เคยออกจากบ้านแถว
Jon Thoroddsen

7
สำหรับ Mac ไม่มีปุ่มวางสาย
kenorb

1
@kenorb มีเมื่อฉันโพสต์ความคิดเห็น ... แต่ Apple ชอบที่จะลบคุณสมบัติในช่วงหลายปีที่ผ่านมา netdna.webdesignerdepot.com/uploads/2009/01/…อันที่จริงนี่เป็นหนึ่งในคีย์บอร์ดที่ฉันโปรดปรานตลอดกาล
davr

9

ฉันไม่เห็นปุ่มลัดสำหรับ macbook สำหรับใช้เป็นกลุ่มในเทอร์มินัลมาตรฐาน หวังว่ามันจะช่วยใครซักคน สำหรับผู้ใช้ macOS (ทดสอบบน macbook pro 2018):

fn+ - ย้ายไปที่บรรทัดเริ่มต้น

fn+ - เลื่อนไปยังบรรทัดสุดท้าย

fn+ - เลื่อนหน้าขึ้น

fn+ - เลื่อนหน้าลง

fn+ g - เลื่อนเคอร์เซอร์ไปที่ตำแหน่งเริ่มต้นของเอกสาร

fn+ shift + g - เลื่อนเคอร์เซอร์ไปที่ท้ายเอกสาร

สำหรับสองคำสั่งสุดท้ายบางครั้งจำเป็นต้องแตะสองครั้ง


6

อาจไม่เกี่ยวข้องกัน แต่ถ้าคุณต้องการเริ่มบรรทัดใหม่หลังจากบรรทัดปัจจุบันคุณสามารถใช้ o ใดก็ได้ในบรรทัด


3

$ตัวเลือกที่ง่ายที่สุดจะสำคัญในการ หากคุณทำงานกับกลุ่มข้อความคุณอาจชื่นชมคำสั่ง{และ}เพื่อเลื่อนย่อหน้าไปข้างหน้าและไปข้างหน้าตามลำดับ


2

ฉันคุ้นเคยกับ Home / End ทำให้ฉันเริ่มต้นและสิ้นสุดบรรทัดในโหมดแทรก (จากการใช้ใน Windows และฉันคิดว่า Linux) ซึ่ง Mac ไม่รองรับ สิ่งนี้น่ารำคาญเป็นพิเศษเพราะเมื่อฉันใช้ vim บนระบบระยะไกลฉันก็ไม่สามารถทำได้อย่างง่ายดาย หลังจากการลองผิดลองถูกและเจ็บปวดฉันขึ้นมาด้วย.vimrcเส้นเหล่านี้ซึ่งทำสิ่งเดียวกัน แต่ผูกกับ Ctrl-A สำหรับการเริ่มต้นของบรรทัดและ Ctrl-D สำหรับจุดสิ้นสุดของบรรทัด (ด้วยเหตุผลบางอย่าง Ctrl-E ฉันเดาว่าสงวนไว้หรืออย่างน้อยก็หาวิธีผูกมันไม่ได้) เพลิดเพลิน

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

มีแผนภูมิที่ดีสำหรับรหัสอักขระควบคุม ASCII ที่นี่สำหรับผู้อื่นเช่นกัน:

http://www.physics.udel.edu/~watson/scen103/ascii.html

นอกจากนี้คุณยังสามารถทำ Ctrl-V + Ctrl- ได้เช่นกัน แต่ก็ไม่ได้วางเช่นกันกับสถานที่เช่นนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.