Переместите всю строку вверх и вниз в Vim

Я видел эту ошибку раньше, обычно она вызвана тем, что вы находитесь за корпоративным прокси, или вы были pwn.
Предполагая, что это прокси, вам нужно выяснить, что такое ваш https прокси, и добавить его в команду pip следующим образом:

pip install requests --proxy=https://my_proxy.com:xxx

где xxx - порт вашего прокси

301
задан BuZZ-dEE 15 July 2015 в 10:59
поделиться

4 ответа

Поместите следующее в ваш .vimrc, чтобы выполнить работу

noremap <c-s-up> :call feedkeys( line('.')==1 ? '' : 'ddkP' )<CR>
noremap <c-s-down> ddp

Исчезновение строки выглядит как ошибка Vim. Я положил взлом, чтобы избежать этого. Вероятно, есть более точное решение.

Обновление

Существует множество необъяснимых сложностей с использованием только комбинаций Vim. Это пропущенные строки и дополнительные скачки строк.

Итак, вот решение для сценариев, которое можно поместить либо в .vimrc, либо в ~ / .vim / plugin / swap_lines.vim

function! s:swap_lines(n1, n2)
    let line1 = getline(a:n1)
    let line2 = getline(a:n2)
    call setline(a:n1, line2)
    call setline(a:n2, line1)
endfunction

function! s:swap_up()
    let n = line('.')
    if n == 1
        return
    endif

    call s:swap_lines(n, n - 1)
    exec n - 1
endfunction

function! s:swap_down()
    let n = line('.')
    if n == line('$')
        return
    endif

    call s:swap_lines(n, n + 1)
    exec n + 1
endfunction

noremap <silent> <c-s-up> :call <SID>swap_up()<CR>
noremap <silent> <c-s-down> :call <SID>swap_down()<CR>
80
ответ дан Mykola Golubyev 23 November 2019 в 01:25
поделиться

If I want to swap one line with the line above I usually do the following

ddkP

Explanation

  • dd will delete the line and add it to the default register.
  • k will move up a line (j would move down a line)
  • P will paste above the current line
552
ответ дан Henno 23 November 2019 в 01:25
поделиться

У меня это сработало:

http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file

Кстати, если вы хотите использовать ALT + some_key, а ваш терминал (urxvt делает это) отказывается подчиняться, вы следует ввести что-то вроде этого в вашем .vimrc:

" For moving lines (^] is a special character; use <M-k> and <M-j> if it works)
nnoremap ^]k mz:m-2<CR>`z==
inoremap ^]j <Esc>:m+<CR>==gi
inoremap ^]k <Esc>:m-2<CR>==gi
vnoremap ^]j :m'>+<CR>gv=`<my`>mzgv`yo`z
nnoremap ^]j mz:m+<CR>`z==
vnoremap ^]k :m'<-2<CR>gv=`>my`<mzgv`yo`z

где ^] - одиночный символ , представляющий клавишу ALT. Чтобы ввести этот символ, используйте C + v, Esc в Vim ( C + q, Esc в Windows).

15
ответ дан 23 November 2019 в 01:25
поделиться

Вот упрощенная версия для MacVim, использующая примеры из статьи Wikia (см. ссылку из комментария gun).

" Move selection up/down (add =gv to reindent after move)
:vmap <D-S-Up> :m-2<CR>gv
:vmap <D-S-Down> :m'>+<CR>gv

Я использую только вариант выделения блока, потому что все, что требуется, это Shift-V для выделения текущей строки, и по желанию курсор вверх/вниз для выделения еще нескольких строк.

Согласно приведенным выше сочетаниям клавиш, нажатие Cmd-Shift-Up/Down приводит к сдвигу выделения блока вверх/вниз. "D" - это клавиша Command в MacVim, для Windows попробуйте "C" (Control) или "A" (Alt) (например, будет Control Alt f).

В статье Викии к ним добавлено "=gv", которое регулирует отступ блока после перемещения, основываясь на окружающем тексте. Это сбивает с толку, поэтому я удалил его, а вместо него добавил горячие клавиши для быстрого отступа выделения.

" Indent selection left/right (Cmd Shift Left/Right is used for Tab switching)
:vmap <D-A-Left> <gv
:vmap <D-A-Right> >gv

Разумеется, то же самое можно сделать с помощью << и >>, но выделение будет потеряно, поэтому эти сочетания клавиш позволяют делать отступы несколько раз и при этом перемещать блок, поскольку выделение сохраняется.

Мой MacVim настроен на переключение табуляции с помощью Cmd-Shift-Left/Right, поэтому я использовал Cmd-Alt-Left/Right.

Вот переключение вкладок для MacVim (помещенное в .gvimrc вместе с остальным выше):

:macm Window.Select\ Previous\ Tab key=<D-S-Left>
:macm Window.Select\ Next\ Tab key=<D-S-Right>
1
ответ дан 23 November 2019 в 01:25
поделиться