Usr_25

Nvim の :help ページは、生成されており、ソースtree-sitter-vimdoc パーサーで解析しています。


VIM ユーザーマニュアル - Bram Moolenaar 著
整形されたテキストの編集
テキストは、1行に1文という形で書かれることはほとんどありません。この章では、文章をページに収まるように分割したり、その他の整形操作について説明します。Vimには、1行の段落や表を編集するための便利な機能も備わっています。
25.1 行の分割 25.2 テキストの配置 25.3 インデントとタブ 25.4 長い行の処理 25.5 表の編集
次の章: usr_26.txt 繰り返し 前の章: usr_24.txt 素早く挿入 目次: usr_toc.txt

行の分割

Vim には、テキストの処理を簡単にするための機能が多数あります。デフォルトでは、エディターは自動改行を行いません。つまり、自分で<Enter>キーを押す必要があります。これは、行末を自分で決めたいプログラムを書く場合に便利です。ドキュメントを作成し、テキストを最大70文字幅にしたい場合にはあまり良くありません。'textwidth'オプションを設定すると、Vimは自動的に改行を挿入します。例えば、非常に狭い30文字の列が必要だとします。次のコマンドを実行する必要があります。
:set textwidth=30
次に、入力を開始します(ルーラーを追加しました)。
1 2 3 12345678901234567890123456789012345
I taught programming for a whi
次に「l」を入力すると、行が30文字の制限を超えます。Vimがこれを検出すると、改行が挿入され、次のようになります。
1 2 3 12345678901234567890123456789012345
I taught programming for a
whil
続けて、段落の残りを入力できます。
1 2 3 12345678901234567890123456789012345
I taught programming for a
while. One time, I was stopped
by the Fort Worth police,
because my homework was too
hard. True story.
改行を入力する必要はありません。Vim が自動的に挿入します。
注意: 'wrap'オプションを設定すると、Vim は改行のある行を表示しますが、ファイルに改行が挿入されるわけではありません。

再フォーマット

Vim エディターはワードプロセッサーではありません。ワードプロセッサーでは、段落の先頭で何かを削除すると、改行が再処理されます。Vim ではそうではありません。そのため、最初の行から「programming」という単語を削除すると、短い行になるだけです。
1 2 3 12345678901234567890123456789012345
I taught for a
while. One time, I was stopped
by the Fort Worth police,
because my homework was too
hard. True story.
これは見栄えがよくありません。段落を整形するには、「gq」オペレーターを使用します。まず、これをビジュアル選択で使用してみましょう。最初の行から、次のように入力します。
v4jgq
「v」を押してビジュアルモードを開始し、「4j」を押して段落の最後に移動してから、「gq」オペレーターを押します。結果は次のようになります。
1 2 3 12345678901234567890123456789012345
I taught for a while. One
time, I was stopped by the
Fort Worth police, because my
homework was too hard. True
story.
注意: 特定の種類のテキストレイアウトに対して自動フォーマットを行う方法があります。「自動フォーマット」を参照してください。
「gq」はオペレーターであるため、操作対象のテキストを選択する3つの方法(ビジュアルモード、移動、テキストオブジェクト)のいずれかを使用できます。上記の例は、「gq4j」でも実行できます。これは入力する量が少ないですが、行数を把握しておく必要があります。より便利な移動コマンドは「}」です。これは段落の最後に移動します。したがって、「gq}」は、カーソルから現在の段落の最後までをフォーマットします。「gq」で使える非常に便利なテキストオブジェクトは段落です。これを試してください。
gqap
「ap」は「a-paragraph」(段落)の略です。これは、1つの段落(空行で区切られた)のテキストをフォーマットします。カーソルの前の部分も同様です。段落を空行で区切っている場合は、次のように入力してファイル全体をフォーマットできます。
gggqG
「gg」を押して最初の行に移動し、「gqG」を押して最後の行までをフォーマットします。警告: 段落が適切に区切られていない場合は、結合されます。よくある間違いは、スペースまたはタブを含む行があることです。これは空白行ですが、空行ではありません。
Vim は、プレーンテキストだけでなく、それ以上のテキストをフォーマットできます。これの変更方法については、fo-table を参照してください。句読点後のスペースの数を変更するには、'joinspaces' オプションを参照してください。フォーマットに外部プログラムを使用することも可能です。これは、Vim の組み込みコマンドではテキストを適切にフォーマットできない場合に役立ちます。'formatprg' オプションを参照してください。

25.2 テキストの配置

行範囲を中央に配置するには、次のコマンドを使用します。
:{range}center [width]
{範囲} は通常のコマンドライン範囲です。[幅] は中央揃えに使用するオプションの行幅です。[幅] を指定しない場合は、デフォルトで'textwidth' の値になります。('textwidth' が 0 の場合、デフォルトは 80 です)。例えば、
:1,5center 40
の結果は次のようになります。
I taught for a while. One
time, I was stopped by the
Fort Worth police, because my
homework was too hard. True
story.

中央揃え

同様に、「:right」コマンドはテキストを右揃えにします。
:1,5right 37
結果は次のようになります。
I taught for a while. One
time, I was stopped by the
Fort Worth police, because my
homework was too hard. True
story.

右揃え

最後に、このコマンドがあります。
:{range}left [margin]
ただし、「:center」および「:right」とは異なり、「:left」への引数は行の長さではありません。代わりに、左マージンです。省略した場合、テキストは画面の左側に配置されます(ゼロマージンを使用すると同じになります)。5 の場合、テキストは 5 スペースインデントされます。例えば、次のコマンドを使用します。
:1left 5
:2,5left
結果は次のようになります。
I taught for a while. One
time, I was stopped by the
Fort Worth police, because my
homework was too hard. True
story.

左揃え

両端揃え
:packadd justify
Vim にはテキストを両端揃えにする組み込みの方法はありません。ただし、これを行うための便利なマクロパッケージがあります。このパッケージを使用するには、次のコマンドを実行します。
packadd! justify
または、この行を vimrc に記述します。
この Vim スクリプトファイルは、新しいビジュアルコマンド「_j」を定義します。テキストのブロックを両端揃えにするには、ビジュアルモードでテキストを強調表示してから、「_j」を実行します。詳細については、ファイルを参照してください。そこへ移動するには、この名前で「gf」を実行します: $VIMRUNTIME/pack/dist/opt/justify/plugin/justify.vim
:%!fmt

別の方法として、外部プログラムを介してテキストをフィルター処理する方法があります。例:

25.3 インデントとタブ
インデントは、テキストを他から目立たせるために使用できます。例えば、このマニュアルのテキスト例は、8つのスペースまたはタブでインデントされています。通常、これは各行の先頭にタブを入力することで入力します。次のテキストを例にとります。
最初の行
2番目の行
:set autoindent
これは、タブ、テキスト、<Enter>、タブ、およびさらにテキストを入力することによって入力されます。'autoindent' オプションを使用すると、インデントが自動的に挿入されます。

新しい行を開始すると、前の行と同じインデントが設定されます。上記の例では、<Enter>の後のタブはもう必要ありません。

インデントの増加
:set shiftwidth=4
行のインデント量を増やすには、「>」オペレーターを使用します。多くの場合、これは「>>」として使用され、現在の行にインデントを追加します。追加されるインデント量は、'shiftwidth' オプションで指定します。デフォルト値は8です。例えば、「>>」で4スペース分のインデントを挿入するには、次のように入力します。
インデントは、テキストを他から目立たせるために使用できます。例えば、このマニュアルのテキスト例は、8つのスペースまたはタブでインデントされています。通常、これは各行の先頭にタブを入力することで入力します。次のテキストを例にとります。
最初の行
例のテキストの2行目で使用した場合、次のようになります。

「4>>」は、4行のインデントを増やします。

タブストップ
:set softtabstop=4
インデントを4の倍数にする場合は、'shiftwidth'を4に設定します。ただし、<Tab>キーを押すと、8スペース分のインデントが設定されます。これを変更するには、'softtabstop' オプションを設定します。
これにより、<Tab>キーで4スペース分のインデントが挿入されます。既に4つのスペースがある場合は、<Tab>文字が使用されます(ファイル内で7文字が節約されます)。(常にスペースを使用し、タブ文字を使用しないようにする場合は、'expandtab'オプションを設定します)。

注意: 'tabstop'オプションを4に設定することもできます。ただし、'tabstop'がデフォルト値の8に設定された状態でファイルを再度編集すると、見栄えが悪くなります。他のプログラムや印刷時もインデントが間違って表示されます。したがって、常に'tabstop'を8に保つことをお勧めします。これがどこでも標準値です。

タブの変更
:set tabstop=3
:retab 8
タブストップが 3 で記述されたファイルを編集します。Vim では、通常のタブストップ値 8 を使用するため、見栄えが悪くなります。これを修正するには、'tabstop' を 3 に設定します。ただし、このファイルを編集するたびに、これを行う必要があります。Vim は、ファイルでのタブストップの使用を変更できます。まず、インデントの見栄えが良くなるように 'tabstop' を設定し、次に 「:retab」コマンドを使用します。

「:retab」コマンドは、'tabstop' を 8 に変更しますが、テキストは見栄えが変わらないように変更します。これにより、空白の範囲がタブとスペースに変換されます。これでファイルを書き込むことができます。次回編集するときは、オプションを設定しなくてもインデントは正しく表示されます。警告: プログラムで「:retab」を使用すると、文字列定数内の空白が変更される可能性があります。したがって、実際のタブの代わりに「\t」を使用することをお勧めします。

ウィンドウの列数よりも広いファイルを編集することがあります。その場合、Vimは行を折り返して、すべてが画面に収まるようにします。'wrap'オプションをオフにすると、ファイル内の各行は画面上で1行として表示されます。すると、長い行の末尾は画面の右端から見えなくなります。見えない文字にカーソルを移動すると、Vimはテキストをスクロールして表示します。これは、水平方向にテキスト上のビューポートを移動するようなものです。デフォルトでは、VimはGUIに水平スクロールバーを表示しません。有効にしたい場合は、次のコマンドを使用します。
:set guioptions+=b
Vimウィンドウの下部に1つの水平スクロールバーが表示されます。
スクロールバーがない場合や使用したくない場合は、次のコマンドを使用してテキストをスクロールします。カーソルは同じ場所に留まりますが、必要に応じて表示されているテキスト内に戻されます。
zh 右に4文字スクロール zH 右にウィンドウ幅の半分だけスクロール ze カーソルを右端に移動してスクロール zl 左に4文字スクロール zL 左にウィンドウ幅の半分だけスクロール zs カーソルを左端に移動してスクロール
これを1行のテキストで示してみましょう。カーソルは「which」の「w」にあります。行の上の「現在のウィンドウ」は、現在表示されているテキストを示します。テキストの下の「ウィンドウ」は、コマンドの左側に表示されるテキストを示します。
|<-- 現在のウィンドウ -->|
長いテキストの一部がウィンドウに表示されています
ze |<-- ウィンドウ -->| zH |<-- ウィンドウ -->| 4zh |<-- ウィンドウ -->| zh |<-- ウィンドウ -->| zl |<-- ウィンドウ -->| 4zl |<-- ウィンドウ -->| zL |<-- ウィンドウ -->| zs |<-- ウィンドウ -->|

折り返しオフ時の移動

'wrap'がオフでテキストが水平方向にスクロールしている場合、次のコマンドを使用して、表示されている文字にカーソルを移動できます。したがって、ウィンドウの左側と右側のテキストは無視されます。これらはテキストをスクロールさせることはありません。
g0 この行の最初の表示文字へ g^ この行の最初の空白でない表示文字へ gm 画面行の中央へ gM この行のテキストの中央へ g$ この行の最後の表示文字へ
|<-- ウィンドウ -->|
長いテキストの一部が1行で表示されています
g0 g^ gm gM g$

単語での折り返し edit-no-break

別のプログラムで使用するテキストを準備する場合、改行なしで段落を作成する必要がある場合があります。'nowrap'を使用するデメリットは、作業中の文全体を確認できないことです。'wrap'がオンの場合、単語が途中で折り返されるため、読みにくくなります。この種の段落を編集する良い解決策は、'linebreak'オプションを設定することです。Vimは、行を表示するときに適切な場所で折り返します。ファイル内のテキストは変更されません。'linebreak'がないと、テキストは次のようになります。
+---------------------------------+
|letter generation program for a b|
|ank.  They wanted to send out a s|
|pecial, personalized letter to th|
|eir richest 1000 customers.  Unfo|
|rtunately for the programmer, he |
+---------------------------------+
:set linebreak
次のようになります
+---------------------------------+
|letter generation program for a  |
|bank.  They wanted to send out a |
|special, personalized letter to  |
|their richest 1000 customers.    |
|Unfortunately for the programmer,|
+---------------------------------+
関連オプション:'breakat'は、改行を挿入できる文字を指定します。'showbreak'は、折り返された行の先頭に表示する文字列を指定します。'textwidth'をゼロに設定すると、段落が分割されるのを防ぎます。

表示行による移動

「j」および「k」コマンドは、それぞれ次の行と前の行に移動します。長い行で使用した場合、これは多くの画面行を一度に移動することを意味します。画面行を1行だけ移動するには、「gj」および「gk」コマンドを使用します。行が折り返されない場合は、「j」および「k」と同じ動作をします。行が折り返される場合は、1行下または上に表示される文字に移動します。これらの移動コマンドをカーソルキーにバインドするこれらのマッピングを使用するとよいでしょう。
:map <Up> gk
:map <Down> gj
段落を1行にする edit-paragraph-join
MS-Wordのようなプログラムにテキストをインポートする場合、各段落は1行である必要があります。段落が現在空行で区切られている場合は、次の方法で各段落を1行にします。
:g/./,/^$/join
これは複雑に見えます。分解してみましょう。
:g/./ 少なくとも1文字を含むすべての行を検索する":global"コマンド。 ,/^$/ 現在の行(空でない行)から空行までの範囲。 join ":join"コマンドは、範囲の行を1行に結合します。
30列で折り返された8行のテキストから始めます。
+----------------------------------+
|A letter generation program           |
|for a bank.  They wanted to           |
|send out a special,                   |
|personalized letter.                   |
|                                   |
|To their richest 1000                   |
|customers.  Unfortunately for           |
|the programmer,                   |
+----------------------------------+
最終的に2行になります。
+----------------------------------+
|A letter generation program for a |
|bank.        They wanted to send out a s|
|pecial, personalized letter.           |
|To their richest 1000 customers.  |
|Unfortunately for the programmer, |
+----------------------------------+
区切り行が空白でも空でない場合、つまりスペースやタブが含まれている場合は、これは機能しないことに注意してください。このコマンドは空白行では機能します。
:g/\S/,/^\s*$/join
最後の段落を結合するには、ファイルの最後に空白または空行が必要です。

25.5 表の編集

4列の表を編集しているとします。
素敵なテーブル テスト 1 テスト 2 テスト 3
入力 A 0.534
入力 B 0.913
3列目に数字を入力する必要があります。2行目に移動し、「A」を使用し、たくさんのスペースを入力してテキストを入力できます。この種の編集には特別なオプションがあります。
set virtualedit=all
これで、テキストがない位置にカーソルを移動できます。これは「仮想スペース」と呼ばれます。このようにすると、表の編集が非常に簡単になります。最後の列のヘッダーを検索してカーソルを移動します。
/test 3
次に「j」を押すと、「入力A」の値を入力できる場所に移動します。「0.693」と入力すると、次のようになります。
素敵なテーブル テスト 1 テスト 2 テスト 3
入力 A 0.534 0.693
入力 B 0.913
Vimは、新しいテキストの前にあるギャップを自動的に埋めました。次に、この列の次のフィールドを入力するには、「Bj」を使用します。「B」は、空白で区切られた単語の先頭に戻ります。次に、「j」は次のフィールドを入力できる場所に移動します。
注:表示内の任意の場所、行の末尾を超えた場所にもカーソルを移動できます。ただし、その位置に文字を挿入するまで、Vimはそこにスペースを挿入しません。
列のコピー
3列目のコピーであり、「テスト1」列の前に配置する必要のある列を追加するとします。次の7つの手順を実行します。 1. この列の左上隅にカーソルを移動します(例: "/test 3")。 2. CTRL-Vを押して、ブロック単位のビジュアルモードを開始します。 3. 「2j」でカーソルを2行下に移動します。これで、「仮想スペース」に入ります。「テスト3」列の「入力B」行です。 4. カーソルを右に移動して、列全体を選択に含め、列間に必要なスペースを含めます。「9l」で実行できるはずです。 5. 選択した長方形を「y」でヤンクします。 6. 新しい列を配置する必要がある「テスト1」にカーソルを移動します。 7. 「P」を押します。
結果は次のようになります。
素敵なテーブル テスト 3 テスト 1 テスト 2 テスト 3
入力 A 0.693 0.534 0.693
入力 B 0.913
「テスト3」列にテキストがなかった行も含め、「テスト1」列全体が右にシフトされたことに注意してください。
次のコマンドで非仮想カーソル移動に戻ります。
:set virtualedit=

仮想置換モード

'virtualedit'を使用するデメリットは、感触が異なることです。カーソルを移動するときに、行末を超えたタブやスペースを認識できません。別の方法を使用できます:仮想置換モード。タブと他の文字の両方を含む表に線があるとします。最初のタブで「rx」を使用します。
inp 0.693 0.534 0.693
| rx | V
inpx0.693 0.534 0.693
レイアウトがめちゃくちゃです。それを回避するには、「gr」コマンドを使用します。
inp 0.693 0.534 0.693
| grx | V
inpx 0.693 0.534 0.693
何が起こるかというと、「gr」コマンドは、新しい文字が適切な量の画面スペースを占めるようにします。ギャップを埋めるために、余分なスペースまたはタブが挿入されます。したがって、実際に起こることは、タブが「x」に置き換えられ、その後、その後ろのテキストがその場所を維持するように空白が追加されることです。この場合、タブが挿入されます。複数の文字を置き換える必要がある場合は、「R」コマンドを使用して置換モードに移動します(04.9を参照)。これにより、レイアウトが乱れ、間違った文字が置き換えられます。
inp 0 0.534 0.693
| R0.786 | V
inp 0.78634 0.693
「gR」コマンドは、仮想置換モードを使用します。これにより、レイアウトが保持されます。
inp 0 0.534 0.693
| gR0.786 | V
inp 0.786 0.534 0.693
次の章:usr_26.txt 繰り返し
著作権:manual-copyrightを参照してください vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンドインデックス
クイックリファレンス

インデントとタブ
注意: 'tabstop'オプションを4に設定することもできます。ただし、'tabstop'がデフォルト値の8に設定された状態でファイルを再度編集すると、見栄えが悪くなります。他のプログラムや印刷時もインデントが間違って表示されます。したがって、常に'tabstop'を8に保つことをお勧めします。これがどこでも標準値です。