Vim - переход на предыдущую позицию при перемещении нескольких строк одновременно - PullRequest
1 голос
/ 27 марта 2020

Когда я использую Vim, я часто использую команды движения при перемещении линий.
Например, если я хочу переместить на 20 строк вниз, я нажимаю 20j.
Теперь, после того, как "прыгнул" на 20 строк вниз , если я хочу go снова вернуться к своей предыдущей позиции, я должен ввести 20k.

Можно ли перейти на мою предыдущую позицию без ввода 20k?
Например, добавив предыдущую позицию в список переходов Vims, я мог бы использовать <c-o> для возврата назад.

(Кстати, я хочу вернуться назад только тогда, когда я больше двигаюсь) что одна строка сразу).

Ответы [ 2 ]

4 голосов
/ 27 марта 2020

Проблема здесь в том, что j и k не являются "прыжками". Когда вы делаете 20j, вы действительно делаете jjjjjjjjjjjjjjjjjjjj, но очень быстро, поэтому вам придется превратить эти произвольные движения в правильные прыжки, чтобы <C-o> заработал. Как это сделать, объяснено в :help jumplist:

. Вы можете явно добавить переход, установив «метку с« m »».

На практике:

m'20j

затем <C-o> или '' или `` до go назад.

Однако существуют более разумные способы передвижения, которые не требуют от вас считать линии и это фактические прыжки, как :help / и :help ?.

3 голосов
/ 28 марта 2020

В моем файле ~/.vimrc есть следующее:

" It adds motions like 25j and 30k to the jump list, so you can cycle
" through them with control-o and control-i.
" source: https://www.vi-improved.org/vim-tips/
nnoremap <expr> j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj'
nnoremap <expr> k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk'

В моем случае в список переходов добавляются движения строк больше 5 строк.

...