Di chuyển con trỏ đến đầu các ký tự không phải khoảng trắng trong một dòng trong Vim


47

Trong Vim, có cách nào để di chuyển con trỏ đến đầu các ký tự không phải khoảng trắng trong một dòng không? Chẳng hạn, làm thế nào tôi có thể di chuyển con trỏ đến "S" trong dòng thứ hai bên dưới?

Dòng đầu tiên
    Dòng thứ hai

Nếu có vấn đề, tôi chủ yếu sử dụng MacVim, nhưng tôi cũng muốn có thể làm điều này từ bảng điều khiển.

Cảm ơn!

Câu trả lời:


53

Nếu tôi hiểu chính xác - từ :h ^:

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

(ngược lại 0, điều này giúp bạn bắt đầu, bất kể khoảng trắng hay không)


1
+1 trên 0nhận xét
Roy Truelove

45

Thay vì nhấn, ^bạn có thể nhấn _(gạch dưới) để chuyển đến ký tự không phải khoảng trắng đầu tiên trên cùng một dòng con trỏ đang bật.

+-nhảy đến ký tự không phải khoảng trắng đầu tiên trên dòng tiếp theo / trước.

(Các lệnh này chỉ hoạt động ở chế độ lệnh, không ở chế độ chèn.)


5

Cũng có thể hữu ích: + và - sẽ di chuyển con trỏ lên hoặc xuống, tương ứng, đến ký tự không trống đầu tiên.


4

bên dưới là đoạn trích từ .vimrc
^[[1~được tạo bằng cách nhấn ctrl+vHome

"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

Cảm ơn, đây là những gì tôi đã tìm kiếm. Hành vi này là phổ biến trên các biên tập viên hiện nay (Atom / VSCode / Sublime để đặt tên cho một số người) và tôi đã quen với nó ...
YoYoYonnY

0

Mở rộng câu trả lời của Andrew Sohn, nếu bạn muốn sử dụng 0 cho hành vi này, chỉ cần bọc nó như vậy:

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 

-1

Tôi chỉ cần ánh xạ lại phím 0 để ^

Chỉnh sửa ~ / .vimrc của bạn

set visualbell t_vb=
map 0 ^
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.