Pindahkan kursor ke awal karakter bukan spasi di baris dalam Vim


49

Dalam Vim, apakah ada cara untuk memindahkan kursor ke awal karakter non-spasi putih dalam satu baris? Misalnya, bagaimana saya bisa memindahkan kursor ke "S" di baris kedua di bawah ini?

Garis pertama
    Baris kedua

Jika itu penting, saya terutama menggunakan MacVim, tetapi saya juga ingin bisa melakukan ini dari konsol.

Terima kasih!

Jawaban:


58

Jika saya mengerti benar - dari :h ^:

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

(berbeda dengan 0, yang membawa Anda ke awal, terlepas dari spasi putih atau tidak)


1
Memberi +1 pada 0komentar
Roy Truelove

47

Alih-alih menekan ^Anda dapat menekan _(garis bawah) untuk melompat ke karakter non-spasi pertama pada baris yang sama dengan kursor aktif.

+dan -lompat ke karakter non-spasi pertama pada baris berikutnya / sebelumnya.

(Perintah-perintah ini hanya bekerja dalam mode perintah, bukan dalam mode sisipkan.)


8

Juga mungkin berguna: + dan - akan memindahkan kursor ke atas atau ke bawah, masing-masing, ke karakter pertama yang tidak kosong.


4

di bawah ini cuplikan dari oleh .vimrc
^[[1~dibuat dengan menekan ctrl+vdanHome

"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

Terima kasih, ini yang saya cari. Perilaku ini umum pada editor saat ini (Atom / VSCode / Sublime untuk beberapa nama) dan saya sudah terbiasa dengan itu ...
YoYoYonnY

0

Memperluas jawaban Andrew Sohn, jika Anda ingin menggunakan 0 untuk perilaku ini, cukup bungkus seperti ini:

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

Saya baru saja memetakan ulang kunci 0 ke ^

Edit ~ / .vimrc Anda

set visualbell t_vb=
map 0 ^
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.