Как выполнить операцию (например, `dd`) над строкой, не перемещая курсор на эту строку в Vim? - PullRequest
2 голосов
/ 08 июля 2019

Как выполнить операцию (например, dd) над строкой, не перемещая курсор на эту строку в Vim?

Предположим, я хочу выполнить некоторую операцию над строкой n(например, dd), и курсор в данный момент находится на линии m.

Обычно я бы сделал следующее:

  • Перейти к строке n (:n)
  • удалить строку n (dd)
  • вернуться к строке m (:m) (+/- 1 смещение)

Действительно, должна быть возможность удалить строку n, не перемещая курсор дважды, используя :?

Ответы [ 2 ]

4 голосов
/ 08 июля 2019

:nd (n - номер строки), за которым следует ctrl+o.

Это одна из странностей с vim, с которыми я все еще борюсь.Я чувствую, что команда :range вообще не должна перемещать курсор.

0 голосов
/ 08 июля 2019

Вы можете определить «функцию сохранения» и даже сделать из нее такую ​​команду:

if !exists('*Preserve')
    function! Preserve(command)
        try
            let l:win_view = winsaveview()
             "silent! keepjumps keeppatterns execute a:command
            silent! execute 'keeppatterns keepjumps ' . a:command
        finally
            call winrestview(l:win_view)
        endtry
    endfunction
endif

command! -nargs=1 Preserve call Preserve(<f-args>)

На всякий случай, если вы используете относительные числа, вы можете запустить:

:Preserve +13d

Функция preserve позволяет выполнять множество других задач, таких как:

" define a command for reindenting the code without moving the cursor 
command! -nargs=0 Reindent :call Preserve('exec "normal! gg=G"')
" Remove trailing whitespaces
call Preserve(":%s,\\s\\+$,,e")

Источники: + https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/ + https://stackoverflow.com/a/3213800/2571881

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...