vimでは、大きなテキストブロックを削除するか、ヤンク/プットする必要があります。
テキストの行を数えて、50dd
50行を削除するようなものを入力できます。
しかし、それは少し苦痛です。事前に削除する行数を知らなくても、この大きなテキストブロックを削除するにはどうすればよいですか?
vimでは、大きなテキストブロックを削除するか、ヤンク/プットする必要があります。
テキストの行を数えて、50dd
50行を削除するようなものを入力できます。
しかし、それは少し苦痛です。事前に削除する行数を知らなくても、この大きなテキストブロックを削除するにはどうすればよいですか?
回答:
ブロックの開始行に移動し、タイプしますma(マーク「a」。もちろん、異なる文字を使用できます。また、異なる文字に複数の文字を使用することもできます。 。
次に、最後の行に移動して、d'a(「a」をマークするにはdelete)またはy'a(「a」をマークするにはヤンク)(a)と入力します。
これにより、現在の行からマークされた行までのすべての行が削除/ヤンクされます(包括的)。
その後、pまたはなどの通常の貼り付けコマンドを使用して、別の場所に貼り付けることができますP。
あなたの環境が後者に恵まれないという偶然の機会に、vi
と同様に互換性vim
があります。
(a)たとえば、呼び出したい関数の定義をコピーして貼り付けるなど、他の場所を探す必要がある場合、これを使用してファイル内の場所を保存します。
同じ方法で現在の行をマークするだけで、ma探しているものを見つけるためにさまよいます。
それを見つけてレジスタにコピーしたら、'a前に保存した行「a」に戻って貼り付けます。
v
本当に必要なのか、それともより良いモーション方法があるのかを自問します。
Vimでは、ビジュアルラインモードを使用します。
テキストの大きなブロックを削除する場合は、カーソルがどの列にあるかを心配する必要がないため、単純な視覚モードよりもこの方法をお勧めします。
}
、段落全体または)
文を選択するために使用できます。さらに、それらについて読むことができます:h object-motions
/something<CR>
、あなたの選択ブロックの最後に到達するための非常に効率的な方法である
j
てカーソルを下に移動する必要はなく(手順3)、行番号G
を入力してから、その行まで選択することもできます。例:V150Gd
できる:set relativenumber
ので、数える必要はありません。;)
:set number
、その後、35行まで削除するd35Gを使用
構造がわかっている大きなテキストブロックを簡単に削除できます。
段落の場合は、次を使用しますd{(たとえば、段落の数でプレフィックスを付けることができます)
括弧内のコードブロックの場合は、次を使用します。 d%
ファイルの最後までテキストが表示される場合は、次を使用します。 dG
終了方法がわかっている場合は、:d/を使用し、終了テキストの後に続けて入力しますEnter(正規表現も使用できるため、可能性は無限です)。
または、ビジュアルモード(V)を使用し、モーションキーを使用してテキストをすばやく選択し(byなど{)、削除します(d)。
または、Lie Ryanが提案したように、d/search-string/e
現在のカーソルから検索された文字列までのテキストを削除するために使用します。
参照::help d
および:help motion
詳細については。
d/search-string/e
、現在のカーソルから検索文字列自体を含む検索文字列の最後までc/search-query
削除し、削除後に挿入モードになります。d/
with を使用するset incsearch
と、適切なテキスト範囲で操作しているかどうかを対話式に把握でき、検索クエリの入力を停止して必要以上の入力を避けることができるため、適切な組み合わせです。
d
、a
(外部)またはi
(内部)とオブジェクト指定子を使用すると非常に便利です。以下のようなオブジェクトw
の単語のために、p
段落のための、(
またはb
のために(...)
、[
のために[...]
、{
またはB
のため{...}
などのビジュアル・オペレータのためのドキュメント。
モーションやテキストオブジェクトを使用できます。たとえば、を使用して、カーソルから次の空白行までをすべて削除できますd}
。カーソルが段落内にある場合、段落はdip
またはで削除できますdap
。カーソルがHTMLタグ内にある場合は、dit
またはで削除できますdat
。
これらのニーモニックは、「d elete i nside」と「d elete a round」(段落/タグ/括弧)です。
私は通常やる
:<start>,<end>d
指定された行を含む、指定された開始行番号と終了行番号の間のすべての行が削除されます。
start
およびの両方end
が、絶対行番号、パターン、または別の位置からのオフセットであることに注意してください。
また、Vimの範囲ドキュメントの表示に関するdoubleDownのコメントも参照してください。有用なヒントがあります。
例:
次のファイルがあるとします。
1. The quick brown
2. fox jumps
3. over the
4. lazy dog.
次に、コマンドを使用する:2,3d
か:/fox/,/over/d
、:/quick/+1,/lazy/-1
or またはor を使用する:+1,+2d
と、最初の行にいる場合:-1,.d
、または3行目にいる場合は、次のようになります。
1. The quick brown
4. lazy dog.
:set ruler
し、見つけるために、テキストの上&下に移動start
し、end
行番号、そしてやる:<start>,<end>d
:+12,+24d
<start>
し、<end>
このために。参照については、を参照してください:h [range]
。ですから、実際にはあなたが考えていたよりもかなり柔軟です。
処理している区切りブロック(例:コードまたはXML / HTMLタグ)の場合、カーソルをブロックの先頭に配置し、ビジュアルモードを使用して%
コードのブロック全体をすばやく選択してからヒットできます。d
それらを削除します。
dap
、段落を削除するにはda(
、da{
、da[
、括弧、中括弧、または角括弧でdelimetedブロックを削除します。htmlの場合dat
、タグを削除し、文字列da'
をda"
削除します。ありdip
、di(
区切り文字内のすべてのものを削除し、無傷の区切り文字を残すなどの変異体は、。または、vap
(resp vip
)を使用して、すべての(各内部)段落を選択できます。(そしてandがva(
ありvi(
ます。)さらにcap
、and cip
(またはca(
and ci(
)があり、削除して挿入モードに移行します(つまり、「change」)。そしてyap
ヤンクに
numbers.vimのプラグインは、このために非常に便利です。これは、各行の前に行番号を付ける拡張された方法です。'number'
およびのように'relativenumber'
、両方が1つになりました!
インストール後にデフォルトで有効になりset number
ますが、vimrcをまだ持っていない場合は、奇妙な方法で動作するため、vimrc に追加することもできます。
では、通常モードではのようになります:set relativenumber
:
3 call plug#begin('~/.vim/plugged')
2
1 Plug 'myusuf3/numbers.vim'
7 set number█
1
2 " Add indentation 'guidelines' (:IndentLinesToggle or <F11>)
3 Plug 'Yggdroot/indentLine'
相対行番号が表示されますが、カーソルが置かれている行を除き、絶対行番号(この場合は7)が表示されます。
その後、挿入モードに切り替えるとnumber
、常に絶対行番号を表示することで設定されたかのように動作します。
4 call plug#begin('~/.vim/plugged')
5
6 Plug 'myusuf3/numbers.vim'
7 set number█
8
9 " Add indentation 'guidelines' (:IndentLinesToggle or <F11>)
10 Plug 'Yggdroot/indentLine'
さらにいくつかのオプションといくつかのコマンドがあります(ホームページを確認してください)が、ほとんどの人はデフォルトで機能するはずです。
set number
、set relativenumber
次にautocmd InsertEnter * :set norelativenumber
、そしてautocmd InsertLeave * :set relativenumber
通常の入力手順にd加えてモーションを使用できます(他の回答で既に説明したとおり)。EasyMotionプラグインは、問題をすばやく簡単に解決できる新しいモーションを提供します。
画面上の現在のカーソル位置から任意の単語の末尾まで削除したい場合、モーションキーは<Leader>
<Leader>
e(通常のe
モーションと同様)になります。次に、問題の単語の末尾に表示される強調表示された文字を入力します。線の動きもあるので、現在の線を問題の線まで削除できます<Leader>
<Leader>
j。
私は自分の持っている<Leader>
にキーセットを,。したがって、完全なコマンドはd<Leader>
<Leader>
e{強調表示された文字}です。
から:help easymotion
:
EasyMotionは、vimでいくつかのモーションを使用するはるかに簡単な方法を提供します。それは取る
<number>
のうち<number>
、Wまたは<number>
Fを{char}
、すべての可能な選択肢を強調表示し、あなたがターゲットに直接ジャンプする一つのキーを押すようにすることによって。使用可能なモーションの1つがトリガーされると、カーソルの前後に表示されるすべてのテキストがフェードされ、モーションターゲットが強調表示されます。
編集:
EasyMotionのgithubリポジトリはhttps://github.com/Lokaltog/vim-easymotionにあります。
easymotionを使用している人々に関するこのredditは、楽しい読み物かもしれません。
問題を解決できる簡単な解決策があります。
削除するテキストブロックの先頭にカーソルを置き、実行しますd50gg
。
これにより、現在の位置からテキストの50行目までのすべての行が削除されます。
EQ:カーソルが行にある場合は46、d50gg
削除させていただきます4行を。
G
viでも動作するため、ggの代わりに使用することをお勧めします。もちろん、行先の:set number
行番号を見つけるのに常に役立ちます。
行を強調表示する視覚モードを使用します。
必要なものを削除するために右列にカーソルを置く必要がある視覚モードを単に使用するのに比べて、行全体を削除するため、コードのブロックを削除するこの方法を好みます。
私はrelativenumber
いつも持っているのは好きではないので、ビジュアルモードのときだけ有効にするようにVimを設定しました:
" Entering Visual mode
nnoremap <silent> v :set relativenumber cursorcolumn<CR>v
nnoremap <silent> <C-q> :set relativenumber cursorcolumn<CR><C-q>
nnoremap <silent> gv :set relativenumber cursorcolumn<CR>gv
nnoremap <silent> V :set relativenumber<CR>V
" When finished
augroup ClearCursorColumnAndLine
autocmd!
autocmd CursorHold * set norelativenumber nocursorcolumn nocursorline
augroup END
これにより、タスクが簡単になります。
V49jd
打った後V、ターゲットラインがどれだけ離れているかを見ることができるからです。
これは長い目で見れば煩わしいかもしれません(relativenumberを有効/無効にするとテキストが左右に移動します)が、これまでのところかなり楽しんでいます。
v<Esc>d50j
か?
V
、行単位の操作を行うことがわかっている場合に開始し、d
自信を深めるために最後まで残すことができます。
move
最後までできることを説明できれば。その後、最後まで削除することは、最後まで移動することと同じです。