Разница между $и g_ в vim?

Я пытался узнать некоторые новые аккуратные ярлыки в vim, и я обнаружил g_. В соответствии с http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/

$  → go to the end of line
g_ → go to the last non-blank character of line

Когда я буду использовать g_ вместо $?

Ответ 1

Я думаю, что самое важное отличие просто указано в файлах справки:

:h $
In Visual mode the cursor goes to just after the last character in the line.

Итак, если вы делаете v $ d, он удаляет, включая "после последнего символа", который является символом новой строки, поэтому он подведет строку под ней до текущей. Но если вы сделаете v g_ d, он сохранит новую строку.

Я действительно не знал о g_, кажется полезным.

Изменить. Поскольку этот ответ получает upvotes, с тех пор я использовал g_ (и его reverse, _), чтобы сделать сопоставление, которое yanks/удаляет текущую строку, исключая пробелы ведущего/конечного пробела и исключая разрывы строк:

" delete/yank line, but only whitespace-trimmed version
nnoremap <Leader>dd _yg_"_dd
nnoremap <Leader>yy _yg_

Ответ 2

g_ УДИВИТЕЛЬНО, когда вы заставляете текст вставлять туда, где вы не хотите, чтобы разрыв строки включался - как в командной строке, где он автоматически запускает команду.