เลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของอักขระที่ไม่ใช่ช่องว่างในบรรทัดใน Vim


48

ใน Vim มีวิธีการเลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของอักขระที่ไม่ใช่ช่องว่างในบรรทัดหรือไม่? ตัวอย่างเช่นฉันจะย้ายเคอร์เซอร์ไปที่ "S" ในบรรทัดที่สองด้านล่างได้อย่างไร

เส้นแรก
    บรรทัดที่สอง

ถ้าเป็นเรื่องสำคัญฉันจะใช้ MacVim เป็นหลัก แต่ฉันก็อยากจะทำเช่นนี้จากคอนโซล

ขอบคุณ!

คำตอบ:


57

ถ้าฉันเข้าใจถูกต้อง - จาก:h ^:

^ To the first non-blank character of the line.
  |exclusive| motion.

(ตรงกันข้ามกับ0ที่ทำให้คุณเริ่มต้นโดยไม่คำนึงถึงช่องว่างหรือไม่)


1
+1 ใน0ความคิดเห็น
Roy Truelove

46

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

+และ-ข้ามไปยังอักขระที่ไม่ใช่ช่องว่างตัวแรกในบรรทัดถัดไป / ก่อนหน้า

(คำสั่งเหล่านี้ใช้งานได้ในโหมดคำสั่งเท่านั้นไม่ได้อยู่ในโหมดแทรก)


8

อาจเป็นประโยชน์เช่นกัน: + และ - จะเลื่อนเคอร์เซอร์ขึ้นหรือลงตามลำดับไปที่อักขระที่ไม่ใช่ช่องว่างตัวแรก


4

ด้านล่างนี้เป็นตัวอย่างข้อมูลจาก. vimrc
^[[1~ถูกสร้างโดยการกดctrl+vและHome

"jump to first non-whitespace on line, jump to begining of line if already at first non-whitespace
map <Home> :call LineHome()<CR>:echo<CR>
imap <Home> <C-R>=LineHome()<CR>
map ^[[1~ :call LineHome()<CR>:echo<CR>
imap ^[[1~ <C-R>=LineHome()<CR>
function! LineHome()
  let x = col('.')
  execute "normal ^"
  if x == col('.')
    execute "normal 0"
  endif
  return ""
endfunction

ขอบคุณนี่คือสิ่งที่ฉันกำลังค้นหา พฤติกรรมนี้เป็นเรื่องธรรมดาในบรรณาธิการทุกวันนี้ (Atom / VSCode / Sublime เพื่อบอกชื่อไม่กี่คน) และฉันเคยชินกับมัน ...
YoYoYonnY

0

ขยายคำตอบของ Andrew Sohn หากคุณต้องการใช้ 0 สำหรับพฤติกรรมนี้ให้ใช้วิธีห่อ:

function! LineHome()
  let x = col('.')
  execute "normal ^"
  if x == col('.')
    unmap 0
    execute "normal 0"
    map 0 :call LineHome()<CR>:echo<CR>
  endif
  return ""
endfunction 

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