VIMでカーソルの後または周りの単語を削除する


212

VIMTextMateに切り替えています。私が見つかりました。^+WINSERTモードで非常に便利。ただし、カーソルの前の単語だけでなく、カーソルの前後の単語も削除したいと思います。

グーグル操作をしましたが、^+Wカーソルの前に単語を削除するしかありませんでした。

回答:


78

あなたがすべきことは、一連のコマンドに特定のキーのimapを作成することです。この場合、コマンドはあなたを通常モードにドロップし、現在の単語を削除してから挿入に戻します:

:imap <C-d> <C-[>diwi

29
":h diw"は、多くの便利な機能を提供します。
klokop、2011年

12
<Co>ご利用時のボーナスボーナスポイント。ノーマルモードで1つのコマンドを実行し、挿入に直接ジャンプするので、のようなものもimap <C-d> <C-o>diw動作します。また、<Esc>がほぼ常に行う、取り消しポイントは作成されません。
ゼルク

挿入モードの<Co>が私の一日を作りました:)
Lusk116 '29

541

ノーマルモード:

daw : delete the word under the cursor    
caw : delete the word under the cursor and put you in insert mode 

125
私がそれをdaw:単語を削除し、caw:単語を変更すると考えると役に立ちます。
welbornio 2014年

1
神は私が使用da)してきましたci)が、これについて考えたことはありません!
Sky

1
ゴールドジェリーです。ゴールド!私は自分でこれらの赤ちゃんをマッピングされた.vimrc:そうのようなファイル nmap <Leader>d dawnmap <Leader>c caw
racl101

1
おそらく、それawはオブジェクト選択の一例です。ビジュアルモードでオブジェクトの選択を試して、オブジェクトの効果を確認できます。vimdoc.sourceforge.net
htmldoc

103

それだけだと思います daw

daw - delete a word

1
私はそれaがコマンドであることを知ってAppend text after the cursor [count] times.いますが、どうやってdaw働くのですか?
syntagma 2014年

3
@REACHUSの最初の文字dは、「削除」することを指示します。'a'は一種のパラメーターであり、区切り文字を含む削除を指定します。最後に、 'w'はparameterwordユニットが削除されることを指定します。
vlad-ardelean 2014年

2
違いは何だdwとはdaw
AK_ 2017年

5
@AK_遅い応答ですが、単語の途中にいる場合はdw、カーソルから単語の末尾までが削除されますが、単語daw全体とスペースが削除されます。diw周囲の空白に触れずに単語全体を削除します。
ドミターズ2017年

67

以下は通常モードで機能します:ほとんどの削除では通常モードである必要があるというDan Olsonの回答に同意します。詳細は以下をご覧ください。

カーソルが単語内にある場合:単語内
diwを削除するには(スペースを含まない)
daw、単語の周囲を削除するには(次の単語の前にスペースを含める)。

カーソルが単語の先頭にある場合は、を押しdwます。

これは、通常の移動数を加算することで乗算できます。たとえば、2wは2ワード前に移動するため、d2wは2ワードを削除します。

挿入モード^ w
Vimでの移動にhjklを使用するアイデアは、ホームローに手を置いたほうが生産性が高いということです。単語の終わりに^ wを使用すると、単語をすばやく削除できます。挿入モードになっている場合は、テキストを入力し、矢印キーを使用して、家の行の哲学に反した単語の真ん中で終わります。
通常モードで単語を変更したい場合は、単語を完全に変更したい場合cd(削除)ではなく(変更)を使用し、i押して戻る必要なく、挿入モードに再度入ることができます。タイピングに。


42

のような意味ですか?

dw

10
パーティーに遅れますが、dwは現在の位置から単語の最後まで削除します。最初から単語全体を削除するには、dwまたは
dawを

1
dwハイフンやその他の句読点を過ぎても削除されません。
ccpizza

*注意:これはバッファ/最後のヤンクを上書きします。これは、「削除」だけでなく、「カット」操作の詳細です。
MD。モヒウディン・アーメド

23

通常モードで2つの空白の間のすべての文字を削除するには:

daW

単語を1つだけ削除するには:

daw 

20

それは問題だった挿入モードでそれを行うための組み込みの方法があるようには見えません。他の回答のいくつかは、通常モードに対して正しいだけでなく、カスタムマッピングを作成して挿入モードで機能を追加できることを指摘しています。

正直なところ、ほとんどの削除は通常モードで行う必要があります。^ Wについてはきちんと把握していますが、escよりも通常モードにして、より強力な削除コマンドを自由に使えるようにしたい状況を考えることができるかどうかはわかりません。

この点で、Vimは他の多くのエディター(TextMateを含む)とは大きく異なります。生産的に使用している場合は、挿入モードであまり時間をかけないことに気付くでしょう。


1
^ waをよく使用します。ほとんどの場合、単語を誤って入力します。前に戻って欠落している文字などを追加するのではなく、全体を削除して、最初からやり直します。たとえば、「example wrd [^ w] word」は「example wrd [^ c] [dw] [i] word」よりもキーストロークが少ない
dbr

1
dbr:vimがサポートする基本的な^ W動作を実行するように求めていませんでした。彼は挿入モードの途中で単語をすべて削除するように求めていました。これはvimにとってちょっと変な状況なので、それを実行するコマンドはありません。本当に機能が必要な場合は、^ Qを常に<Esc> ciwにバインドできます。ああ、[^ c] [dw] [i]の[i]も冗長です。[^ c] [ciw]を使用できます
bfabry

4
「それは方法があるように見えない...」-まあそれを行う方法は無数にあります- 組み込みの方法はありません、アファイク。挿入モードと通常モードの比較に関するDanの発言には完全に同意しますが、もちろん挿入モードのマッピングを定義するだけでもかまいません。挿入モードの機能が本当に必要な場合は、「:help imap」で目的の処理を実行できます。
user55400 2009年

13

カーソルが使用されているdiw
単語全体を削除するにはカーソルが置かれている単語全体を削除し、挿入モードciw
にするには、単語全体を削除するのではなく、現在の場所から削除する場合に使用します。dw/cw


8

単語を削除する方法はたくさんあるので、それらを説明しましょう。

あなたが編集すると仮定します:

foo-bar quux

カーソルが「バー」の「a」の上にあるときにコマンドを呼び出します。

foo-bquux  # dw:  letters then spaces right of cursor
foo-quux   # daw: letters on both sides of cursor then spaces on the right 
foo- quux  # diw: letters on both sides of cursor
foo-bquux  # dW:  non-whitespace then spaces right of cursor
quux       # daW: non-whitespace on both sides of cursor then spaces on the right
 quux      # diW: non-whitespace on both sides of cursor

5

残念ながら、挿入モードにはそのようなコマンドはありません。VIMでは、カーソルの下にある単語全体を削除するにはviwd、NORMALモードで入力します。これは「V isual-block I nner W ord D elete」を意味します。W句読点を含めるには大文字を使用します。


3

受け入れられた答えは単語の削除を繰り返すことを試みるとき失敗します、代わりにこの解決策を試してください:

" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw

CTRL-BackSpaceをマップし、通常モードでも動作します。


ノーマルモードでも機能するので、この回答の方が好きです。
sivabudh 2011年

2

カーソルの前の特定の数の文字を削除するには、Xを使用できます。カーソルの後ろの特定の数の単語を削除するには、dwを使用できます(たとえば、3ワードの場合、3dwを使用して複数の単語を削除できます)。一般的にカーソルの周りを削除するには、dawを使用できます。


2

古いviではb、カーソルをカーソルの前の単語の先頭にw移動し、カーソルを単語の後ろの先頭に移動し、カーソルを単語eの末尾のカーソルの後ろに移動dwし、カーソルから単語の末尾まで削除しました。

と入力wbdwすると、カーソルが単語の先頭または末尾にある場合でも、cursor周辺の単語が削除されます。単語の後の空白は、削除する単語の一部と見なされることに注意してください。


2

「前」と「後」の使い方については正確にはわかりませんが、試しましたか

dw

編集:挿入モードで使用する何かを探していると思います。不思議なことに、ドキュメントには何も見つかりません。ctrl-wだけですべてのようです。


2

挿入モードと挿入モードの外で一貫性を保つために、2つのマッピングを作成しました。

:map <'Key of your choice'> caw

:imap <'Key of your choice'> <'Esc'> caw


0

カーソルの前の単語だけでなく、カーソルの前後の単語も削除したい。

その場合、OPによって提案されたソリューション(つまりを使用<c-w>)は、受け入れられた回答と組み合わせることができます。

inoremap <c-d> <c-o>daw<c-w>

あるいは(より短い解決策):

inoremap <c-d> <c-o>vawobd

入力例:

word1 word2 word3 word4
               ^------------- Cursor location

出力:

word1 word4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.