Перемістіть курсор до початку символів, що не містять пробілів, у рядку Vim


49

Чи існує спосіб Vim перемістити курсор на початок символів, що не містять пробілів у рядку? Наприклад, як я можу перемістити курсор на "S" у другому рядку нижче?

Перша лінія
    Другий рядок

Якщо це важливо, я в першу чергу використовую MacVim, але я також хотів би це зробити з консолі.

Дякую!

Відповіді:


58

Якщо я правильно розумію - від :h ^:

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

(на відміну від того 0, що приводить вас до початку, незалежно від пробілу чи ні)


1
+1 на 0коментар
Roy Truelove

47

Замість натискання ^можна натиснути _(підкреслити), щоб перейти до першого символу, який не пробігає, на тому ж рядку, на якому знаходиться курсор.

+і -перейти до першого символу без пробілів у наступному / попередньому рядку.

(Ці команди працюють лише в командному режимі, а не в режимі вставки.)


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

Розгортаючи відповідь Ендрю Сона, якщо ви хочете використовувати 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 

-1

Я просто переставляю клавішу 0 на ^

Відредагуйте свій ~ / .vimrc

set visualbell t_vb=
map 0 ^
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.