Vimから行を削除しますが、切り捨てられません。

Vimから行を削除しますが、切り捨てられません。

これは重複ではありませんviから行を削除する、さまざまな質問をします。行を切らず(クリップボードに入れる)削除したいです。

行の一部をコピーし、1行を削除してから、行の対応する部分を別の場所に貼り付けたいです。完全な行を使用してv3w貼りdd付けます。p

答え1

あなたが探しているブラックホールレジスタ:help quote_)。削除コマンドを追加すると"_内容が消えます。したがって、次の3つの単語を削除して保持してから行全体を削除するには、を使用できますd3w"_dd

高度な図面

行の一部を保持しますが、行全体を削除するユースケースは一般的です。これに対するマッピングセットを作成しました。

"["x]dDD            Delete the characters under the cursor until the end
"                   of the line and [count]-1 more lines [into register x],
"                   and delete the remainder of the line (i.e. the
"                   characters before the cursor) and possibly following
"                   empty line(s) without affecting a register.
"["x]dD{motion}     Delete text that {motion} moves over [into register x]
"                   and delete the remainder of the line(s) and possibly
"                   following empty line(s) without affecting a register.
"{Visual}["x],dD    Delete the highlighted text [into register x] and delete
"                   the remainder of the selected line(s) and possibly
"                   following empty line(s) without affecting a register.
function! s:DeleteCurrentAndFollowingEmptyLines()
    let l:currentLnum = line('.')
    let l:cnt = 1
    while l:currentLnum + l:cnt < line('$') && getline(l:currentLnum + l:cnt) =~# '^\s*$'
        let l:cnt += 1
    endwhile

    return '"_' . l:cnt . 'dd'
endfunction
nnoremap <expr> <SID>(DeleteCurrentAndFollowingEmptyLines) <SID>DeleteCurrentAndFollowingEmptyLines()
nnoremap <script> dDD D<SID>(DeleteCurrentAndFollowingEmptyLines)
xnoremap <script> ,dD d<SID>(DeleteCurrentAndFollowingEmptyLines)
function! s:DeleteCurrentAndFollowingEmptyLinesOperatorExpression()
    set opfunc=DeleteCurrentAndFollowingEmptyLinesOperator
    let l:keys = 'g@'

    if ! &l:modifiable || &l:readonly
        " Probe for "Cannot make changes" error and readonly warning via a no-op
        " dummy modification.
        " In the case of a nomodifiable buffer, Vim will abort the normal mode
        " command chain, discard the g@, and thus not invoke the operatorfunc.
        let l:keys = ":call setline('.', getline('.'))\<CR>" . l:keys
    endif

    return l:keys
endfunction
function! DeleteCurrentAndFollowingEmptyLinesOperator( type )
    try
        " Note: Need to use an "inclusive" selection to make `] include the last
        " moved-over character.
        let l:save_selection = &selection
        set selection=inclusive

        execute 'silent normal! g`[' . (a:type ==# 'line' ? 'V' : 'v') . 'g`]"' . v:register . 'y'

        execute 'normal!' s:DeleteCurrentAndFollowingEmptyLines()
    finally
        if exists('l:save_selection')
            let &selection = l:save_selection
        endif
    endtry
endfunction
nnoremap <expr> dD <SID>DeleteCurrentAndFollowingEmptyLinesOperatorExpression()

答え2

名前付きバッファで使用したい部分をコピーしてそこから貼り付けることができます。たとえば、次のようになります。

"ay3w

これにより、名前付きバッファaから3つの単語が抽出されます。

"ap

後で名前付きバッファから貼り付けます。最初に3つの単語を削除してから、すべての行を削除して貼り付けることもできます。

"2p

これは、削除バッファから最後に削除された2番目の項目を貼り付けます。これは VIM フラグの問題なので、コメントの提案に従います。この問題には基本的なVIMソリューションがあります(Viでは機能しません)。

y3w then in new place "0p

VIM には、最後のコピーを 0 レジストリに保持する基本機能があります。

関連情報