Next: usr_05.txt, Previous: usr_03.txt, Up: 目次 [Index]
*usr_04.txt* For Vim バージョン 8.1. Last change: 2014 Aug 29 VIM USER MANUAL - by Bram Moolenaar 簡單な編輯
本章では、 テキストの修正方法や他の場所への移動方法をいくつか說明します。テキストを變更するための 3 つの基本操作方法 (オペレータとモーション、ビジュアルモード、テキストオブジェクト) についても說明します。
|04.1| | オペレータとモーション |
|04.2| | テキストの變更 |
|04.3| | 變更の繰り返し |
|04.4| | ビジュアルモード |
|04.5| | テキストの移動 |
|04.6| | テキストのコピー |
|04.7| | クリップボード |
|04.8| | テキストオブジェクト |
|04.9| | 置換モード |
|04.10| | 終はりに |
二章で學んだやうに、"x
" は 1 文字削除するコマンドです。カウンタを使つて、"4x
" とすれば 4 文字削除されます。
"dw
" コマンドで單語を削除できます。"w
" が單語單位で移動するコマンドであることを思ひ出してください。"d
" コマンドにモーション (移動) コマンドを續けることで、現在の場所から、モーションコマンドで移動した場所までを削除できます。
例へば、"4w
" コマンドはカーソルを 4 單語分、動かします。といふことは、"d4w
" は 4 つの單語を削除するコマンドなわけです。
To err is human. To really foul up you need a computer. ------------------> d4w To err is human. you need a computer.
モーションコマンドでカーソルが移動した場所までが削除されます。移動先の單語の先頭文字が削除されないのは、そのはうが便利だからです。しかし、"e
" コマンドで單語の末尾まで移動した場合は、末尾の文字も削除したはうが便利ですよね:
To err is human. you need a computer. --------> d2e To err is human. a computer.
カーソル下の文字が範圍に含まれるかどうかは、移動に使つたコマンドによつて異なります。リファレンスマニュアルでは、移動先の文字が含まれないことを "exclusive" (排他的)、含まれることを "inclusive" (包括的) と呼んでゐます。
"$
" コマンドで行末まで移動できます。"d$
" コマンドならカーソル位置から行末までが削除されます。これは包括的モーションなので行末の文字は削除處理の對象となります。
To err is human. a computer. ------------> d$ To err is human
オペレータとモーションを組み合はせるときは、最初にオペレータコマンドを入力します。例へば、"d
" は削除オペレータです。次に "4l
" や "w
" といつたモーションコマンドを入力します。この方法ならテキストのどんな範圍でも操作できます。
"c
" は「變更」オペレータです。"d
" オペレータと同じやうに使へますが、插入モードに入る點が違ひます。例へば、"cw
" は單語を變更します。正確に言ふと、單語を削除してから插入モードに入ります。
To err is human -------> c2wbe<Esc> To be human
"c2wbe
" <Esc>
は次の部分から成ります:
c | 變更オペレータ |
2w | 2 單語進む (單語が削除され、插入モードに入る) |
be | この文字列を插入する |
<Esc> | ノーマルモードに戾る |
勘のいい人なら、ちよつと變だと感じるかも知れません。‘human’ の前の空白が削除されてゐないのです。"どんな問題に關しても單純で、明解で、閒違つた答へがある" といふ格言があります。この "cw
" コマンドを使つた例がまさにそれです。"c
" オペレータは "d
" オペレータと全く同じやうに使へますが、"cw
" はその例外なのです。實際にはこれは "ce
" と同じく、單語末までを變更します。ですから、單語の後ろの空白は含まれないのです。これはかつての Vi までさかのぼる例外です。多くの人々がこれを使つてゐるので、Vim でも不本意ながら殘してあるのです。
"dd
" で行が削除できるのと同じやうに、"cc
" で行全體を變更できます。ただし、インデント(行頭の空白類)は殘されます。
"d$
" で行末まで削除できるのと同じやうに、"c$
" で行末まで變更できます。この機能は "d$
" で行末まで削除してから "a
" で插入モードに入り、文を追加するのと同じです。
いくつかのオペレータとモーションの組合せは頻繁に使はれるため、1 文字コマンドとして用意されてゐます。
"x " | は | "dl " (カーソル下の文字を削除) |
"X " | は | "dh " (カーソルの左側の文字を削除) |
"D " | は | "d$ " (行末まで削除) |
"C " | は | "c$ " (行末まで變更) |
"s " | は | "cl " (1 文字變更) |
"S " | は | "cc " (1 行變更) |
"3dw
" も "d3w
" も 3 つの單語を削除するコマンドです。細かいことが氣になる方のために補足しておくと、最初の例("3dw
")は 1 單語削除を 3 回實行し、2 つ目の例("d3w
")は 3 單語の削除を 1 度だけ實行します。2 つの違ひは區別できません。カウンタを 2 個所で指定することもできます。例へば、"3d2w
" は 2 單語の削除を 3 回繰り返し、結果として 6 單語が削除されます。
"r
" コマンドはオペレータではありません。文字が入力されるまで待機し、入力された文字で、カーソル下の文字を置き換へます。"cl
" や "s
" でも同じ事ができますが、"r
" の場合は最後に <Esc>
を押す必要がありません。
there is somerhing grong here rT rt rw There is something wrong here
"r
" にカウンタを指定すると、指定した數の文字がすべて、同じ文字に置き換へられます。
There is something wrong here 5rx There is something xxxxx here
文字を改行に置き換へたい場合は "r
" <Enter>
を使ひます。1 文字削除され、改行が插入されます。ただし、改行に對してカウンタは適用されません。削除する文字にのみ適用されます。"4r
" <Enter>
は 4 文字削除し、1 つの改行を插入します。
".
" コマンドはもつともシンプルでパワフルなコマンドの 1 つです。これは直前の變更コマンドを繰り返します。例へば、HTML ファイルの編輯中に、全ての ‘<B>’ タグを削除するとしませう。カーソルを最初の "‘<’" に移動し、"df>
" コマンドで ‘<B>’ を削除します。次に ‘</B>’ の "‘<’" を探し、それを削除するのに ".
" コマンドを使ひます。".
" コマンドは直前の變更コマンド(この場合なら "df>
")を實行します。他のタグの削除したければ、カーソルを "‘<’" の上に置いて、.
を打てばよいのです。
To <B>generate</B> a table of <B>contents f< 最初の < を檢索 ---> df> > まで削除 --> f< 次の < を檢索 ---------> . df> を繰り返し ---> f< 次の < を檢索 -------------> . df> を繰り返し -->
".
" コマンドではすべての變更を繰り返すことができますが、"u
" (undo)、CTRL-R
(redo)、先頭が ":
" のコマンド、は繰り返せません。
例2: 文中に何度も出てくる單語 "four" を "five" に變更したいとします。次の手順で變更できます。
/four<Enter> 最初の "four" を探す。 cwfive<Esc> その單語を "five" に變更する。 n 次の "four" を探す . 直前の "five" への變更を繰り返す。 n 次の "four" を探す . 直前の變更を繰り返す。 以下繰り返し。
單純なものならオペレータ-モーション方式で簡單に變更できますが、變更する範圍に適したコマンドを選擇するのが難しいこともあります。そんなときはビジュアルモードを使つてください。
ビジュアルモードに入るには v
を押します。そしてカーソルを動かして變更したい領域を選擇します。選擇中はその領域が强調表示されます。最後にオペレータコマンドを入力します。
例へば、單語の途中から次の單語の途中までを削除するには、次のやうにします。
This is an examination sample of visual mode ----------> velllld This is an example of visual mode
この方法なら、l
を何囘押せば目的の場所まで移動できるか? などと考へる必要が全くありません。削除する範圍を確認してから d
を押すことができます。
選擇した範圍を變更したくなくなつた場合は <Esc>
キーを押してください。ビジュアルモードが終了し、何も變更されません。
行全體を選擇するには "V
" コマンドでビジュアルモードを開始します。行全體が選擇されます。左右に移動しても選擇範圍は變更されません。上下に移動すると、選擇範圍が行單位で擴張されます。
例へば、"Vjj
" で 3 行を選擇してみませう。
+------------------------+ | text more text | >> | more text more text | | 選擇された行 >> | text text text | | Vjj >> | text more | V | more text more | +------------------------+
四角いブロック (矩形、くけい) の範圍を變更したい場合は CTRL-V でビジュアルモードを開始します。このモードは表を編輯するやうな場合に非常に便利です。
name Q1 Q2 Q3 pierre 123 455 234 john 0 90 39 steve 392 63 334
例へば、中央の ‘Q2’ の列を削除するには、カーソルを "‘Q2’" の "‘Q’" に移動します。CTRL-V を押し、矩形ビジュアルモードに入ります。次にカーソルを "3j
" で 3 行下に動かし、w
を押して 1 單語分右に移動します。この狀態では、最後の列の先頭が範圍に含まれてゐるので、h
でそれをはづします。d
を押すと、選擇範圍が削除されます。
ビジュアルモードで選擇中に、選擇範圍の反對側(始點)にカーソルを動かしたいときは、o
を押します (Hint: o は "other end" の意味です)。カーソルは始點に動き、始點を自由に變更できるやうになります。もう一度 o
を押すと、元の終點側に戾ります。
矩形選擇のときは 4 隅が存在します。"o
" は始點と終點を斜めに動くだけです。同じ行の反對側に移動するには "O
" を使つてください。
Note:
ビジュアルモードの "o
" と "O
" はノーマルモードのコマンドとはまつたく違ふ動作なので注意してください。ノーマルモードではカーソル行の上や下に空行を作る機能です。
"d
" や "x
" などのコマンドで何かを削除すると、そのテキストは記錄されます。"p
" コマンドを使ふと、そのテキストをペースト (貼り付け。Vimではこれをプットと呼びます) できます。
どのやうに動くかを見てみませう。まづ、削除したい行にカーソルを移動し、"dd
" コマンドでその行を削除します。次に、プットしたい場所にカーソルを動かして p
を押します。先ほど削除した行がカーソルの下に插入されます。
最初 削除後 プット後 a line a line a line line 2 dd line 3 p line 3 line 3 line 2
行全體を削除したので、"p
" コマンドにより行が插入されました。行の一部 (單語など) を削除した場合は、"p
" コマンドはカーソルの直後にそれがプットされます。
Some more boring try text to out commands. ----> dw Some more boring text to out commands. -------> welp Some more boring text to try out commands.
"P
" コマンドは "p
" と同じですが、カーソルの前にプットします。直前に "dd
" コマンドで行を削除したなら、カーソルの上にその行がプットされます。"dw
" で單語を削除した場合は、カーソルの直前にプットされます。
プットは何囘でも好きなだけ繰り返せます。同じ文が每囘使はれます。
"p
" も "P
" もカウンタを指定できます。指定しただけ、プット處理が繰り返されます。例へば、"dd
" の後に "3p
" を實行すると、削除した行のコピーが 3 つプットされます。
入力してゐるときに、指が頭を追ひ越してしまふことがしばしばあります。その結果、‘the’ を ‘teh’ とタイポ (打ち閒違ひ) したりすることがあります。Vim ではこの種の閒違ひを簡單に修正できます。カーソルを ‘teh’ の ‘e’ の上に置いて、x
p
と打てばよいのです。"x
" で ‘e’ の文字を削除してレジスタに入れ、"p
" で (‘h’ の上にある) カーソル の後ろにレジスタ內容をプットするのです。
teh th the x p
テキストを別の場所にコピーするには、それを削除して、"u
" で削除を取り消し、他の場所で "p
" を使ひプットすることもできますが、ヤンク (yank) を使へばもつと簡單です。"y
" オペレータで文字列をレジスタにコピーできます。その文字列は "p
" コマンドでプットできます。
コピーのことを Vim ではヤンクと呼びます。文字 ‘c’ は既に變更オペレータのために使はれてゐたので "y
" を使ふことになつたわけですが、y
キーを覺えやすくするためにコピー操作をヤンク (yank) と讀んでゐます。
"y
" はオペレータなので、"yw
" とすれば單語をヤンクできます。カウンタも當然指定できます。2 單語をヤンクするには、"y2w
" とします。例を示しませう。
let sqr = LongVariable * --------------> y2w let sqr = LongVariable * p let sqr = LongVariable * LongVariable
"yw
" は單語の後の空白まで含まれるので注意してください。それが嫌なら、"ye
" を使つてください。
"yy
" コマンドは "dd
" が行削除するのと同樣に、行全體をヤンクします。ただ、"D
" が行末まで削除するのに對して、"Y
" は "yy
" と同じ動きになります。この點は氣をつけてください。行末までヤンクしたい時には "y$
" を使つてください。
a text line yy a text line a text line line 2 line 2 p line 2 last line last line a text line last line
GUI 版の Vim (gvim) を使つてゐる場合は、[編輯] メニューに [コピー] コマンドがあります。ビジュアルモードで文字列を選擇してから、メニューの [編輯]-[コピー] を使つてください。選擇文字列がクリップボードにコピーされるので、それを他のプログラムにペーストできます。もちろん Vim 自身でも使へます。
他のアプリケーションでクリップボードに文字列をコピーすれば、Vim の [編輯]-[貼り付け] メニューでそれをペーストできます。これはノーマルモードでも插入モードでも機能します。ビジュアルモードでは、選擇文字列がペーストされた文字列に置換されます。
メニューの [編輯]-[切り取り] はクリップボードにプットする前に文字列が削除されます。[コピー]、[切り取り]、[貼り付け] の 3 つはポップアップメニューでも使へます (ポップアップメニューが利用可能な場合のみ)。ツールバーが利用可能なら、そこにも同じ項目があるはずです。
GUI を使つてゐない場合やメニューを使ひたくない場合は他の方法を使ふしかありません。普通の "y
" や "p
" コマンドを使ふ前に ""*
" (ダブルクォート + アスタリスク)を指定するのです。行を丸ごとクリップボードにコピーするには次のやうにします:
"*yy
クリップボードからプットするにはこうします:
"*p
この機能はクリップボードをサポートした Vim でのみ動きます。クリップボードについての詳細は |09.3| 章 と |clipboard| をご覽ください。
單語の眞ん中にカーソルがある場合、その單語を削除するには "dw
" を實行する前にカーソルを單語の先頭に戾す必要があります。"daw
" を使ふともつと簡單です。
this is some example text. daw this is some text.
"daw
" の "d
" は削除オペレータです。"aw
" はテキストオブジェクトです。‘Hint:’ "aw
" は "A Word" の意味です。つまり "daw
" は "Delete A Word" といふ意味になります。正確には、單語の後の空白も削除されます (單語が行末にある場合は、行末までのすべての空白が削除されます)。
テキストオブジェクトは基本操作方法の 1 つです。オペレータ-モーション方式とビジュアルモードは既に述べました。そこにオペレータ + テキストオブジェクト方式が加はります。
これはオペレータ-モーション方式と非常に似てゐますが、オペレータ-モーション方式では移動コマンドの前と後のカーソル位置がオペレータの範圍となつてゐたのに對し、テキストオブジェクトではオブジェクト全體を對象とします。オブジェクトのどこにカーソルがあつても構ひません。
文全體を變更するのは "cis
" です。次の文を使ひませう:
Hello there. This is an example. Just some text.
2 行目の先頭、‘is an’ の上に移動し、"cis
" を實行してください:
Hello there. Just some text.
カーソルは 1 行目の空白の閒にあります。ここで新たな文 ‘Another line.’ を入力します:
Hello there. Another line. Just some text.
"cis
" は變更オペレータの "c
" とテキストオブジェクトの is
から成ります。"is" は "Inner Sentence" の意味です。"as
" (a sentence) オブジェクトといふのもあります。"as
" は文の後の空白を含みますが、"is
" は含みません。文を削除するときに、前後の空白も同時に消したい場合は "das
" を使ひます。文を修正するため、空白を殘しておきたい場合は "cis
" を使へばよいでせう。
テキストオブジェクトはビジュアルモードでも使へます。テキストオブジェクトを選擇範圍に含めることができます。テキストオブジェクトを指定してもビジュアルモードは終了しないので、何度でもテキストオブジェクトを使へます。例へば、"v
" でビジュアルモードを開始して、"as
" で文を選擇した後に、"as
" を繰り返してたくさんの文を追加できます。最後にオペレータを使つて、選擇した文を對象として、何らかの處理を行ひます。
テキストオブジェクトの機能一覽は |text-objects| を參照してください。
"R
" コマンドを使ふと置換モードに入ります。このモードでは、入力した文字が、カーソル下の文字を置き換へます。このモードは <Esc>
を押すまで續きます。
例へば、‘text’ の 1 つ目の ‘t’ で置換モードを開始したとします:
This is text. Rinteresting.<Esc> This is interesting.
末尾の 5 文字が 12 文字の他の文字に置き換へられてゐます。"R
" コマンドは置換する文字がなくなると自動的に行末をずらします。次の行へ移動したりはしません。
<Insert>
キーで插入モードと置換モードを切り換へることができます。
<BS>
キーで修正をしようとすると、元の文字が復元されます。直前に打つた文字を undo するやうな働きをします。
オペレータ、移動コマンド、テキストオブジェクトを組み合せると、とてつもない數のコンビネーションを生み出すことができます。N 個のオペレータと M 個の移動コマンドを組み合はせれば N * M 個のコマンドが作れるのです!
オペレータの一覽は |operator| を參照してください。
テキストの一部を削除するには數多くの方法があります。ほんの一部ですが、よく使ふものを擧げておきませう。
"x " | カーソル位置の文字を削除 ("dl " と同じ) |
"X " | カーソル位置の直前の文字を削除 ("dh " と同じ) |
"D " | カーソル位置から行末までを削除 ("d$ " と同じ) |
"dw " | カーソル位置から次の單語の先頭までを削除 |
"db " | カーソル位置から直前の單語の先頭までを削除 |
"diw " | カーソル位置の單語を削除 (文の後の空白は除く) |
"daw " | カーソル位置の單語を削除 (文の後の空白を含む) |
"dG " | ファイルの末尾まで削除 |
"dgg " | ファイルの先頭まで削除 |
"d
" の代はりに "c
" を使ふと削除ではなく、變更コマンドになります。"y
" にすればヤンクコマンドです。他のオペレータも同樣です。
他の章では特に說明されない雜多な變更コマンドをいくつか擧げておきます:
"~ " | カーソル位置の大文字/小文字を變更し、カーソルを次に進めます。これは(’tildeop’ がオフの場合は)オペレータではありません。つまりモーションコマンドと組み合はせることができません。ビジュアルモードで使ふと選擇範圍のテキスト全體が變更されます。 |
"I " | (大文字の ‘i’ です) カーソルを行の最初の非空白文字に移動して插入モードを開始します。 |
"A " | 行末にカーソルを動かして、插入モードを開始します。 |
Next: usr_05.txt, Previous: usr_03.txt, Up: 目次 [Index]