2017-06-10 5 views
1

が同様のポストだった:Vim, how to delete empty lines to "_ automatically?Vimの巧妙な空白の削除

私は受け入れソリューションを理解していなかったし、それは(私が望んでいた、少なくともない方法)が機能しなかったことがわかりました。

空行(視覚的またはノーマルモードのかどうか)にddを使用すると、自動的に私は明示的に私は"_dd

を使用して呼び出すことなく、ブラックホールのレジスタに削除された空白行を置くように私はそれをしたいです"_ddを他の鍵にマップすることができますが、これは私がここで求めているものではありません。また、文字の削除の世話をすることはかなり簡単です:nnormap x "_x

一つの解決策は、このレジスタが使用されることはありません可能性があるので、(レジスタ・スタック上の最後のレジスタに削除

  • 再直接である可能性がありとにかく)(そして、例えば"9
  • 、ある場合は、値をコピーし、何もエルス
  • をしない
  • 空白のみであるかどうかを確認するために"9の値をチェックします""

"9私は、私が最もエレガントなソリューションおそらくレジスタは空白のみの部分が含まれている場合

答えて

1

を見るために、チェック以外の私の提案されたソリューションのすべてを行う方法を知らないと思いますが、ここで私が来たものです(@DJMcMayhemの助けを借りて私が尋ねた別の質問で)。

機能と通常モード行の削除ddバインディング:

function! Smart_Delete_dd() 
    let temp = getreg('"', 1) 
    execute 'normal!' 'dd' 
    if matchstr(@", '\_s*') == @" " if just whitespace 
     call setreg('"', temp) 
    endif 
endfunction 
nnoremap <silent> dd :call Smart_Delete_dd()<CR> 

機能とビジュアルモードライン削除Vdバインディング:

function! Smart_Delete_Vd() range 
    let temp = getreg('"', 1) 
    execute 'normal!' . (a:lastline - a:firstline + 1) . 'dd' 
    if matchstr(@", '\_s*') == @" " if just whitespace 
     call setreg('"', temp) 
    endif 
endfunction 
vnoremap <silent> d :call Smart_Delete_Vd()<CR> 
関連する問題