Usr_21

Nvim :help ページ。 ソース から tree-sitter-vimdoc パーサーを使用して生成されました。


VIM ユーザーマニュアル - Bram Moolenaar 著
Vim を一時停止して再開する
この章では、Vim の内部から他のプログラムを実行したり、Vim を終了して後で戻ってきたりするなど、他のプログラムと Vim の使用を組み合わせる方法について説明します。さらに、Vim の状態を記憶し、後で復元する方法についても説明します。
21.1 一時停止と再開 21.2 シェルコマンドの実行 21.3 情報の記憶; ShaDa 21.4 セッション 21.5 ビュー 21.6 モードライン
次の章: usr_22.txt 編集するファイルを見つける 前の章: usr_20.txt コマンドラインコマンドを素早く入力する 目次: usr_toc.txt

一時停止と再開

ほとんどの Unix プログラムと同様に、Vim は CTRL-Z を押すことで一時停止できます。 これにより Vim が停止し、起動元のシェルに戻ります。 シェルで他のコマンドを実行した後、"fg" コマンドで Vim を再開できます。
CTRL-Z
{any sequence of shell commands}
fg
Vim を中断した時点の状態がそのまま復元されます。 CTRL-Z が機能しない場合は、":suspend" を使用することもできます。 Vim をフォアグラウンドに戻すことを忘れないでください。変更が失われてしまいます!
これは Unix のみでサポートされています。 他のシステムでは、Vim は新しいシェルを起動します。 これにより、シェルコマンドを実行することもできます。 ただし、これは Vim を起動したシェルではなく、新しいシェルです。 GUI を実行している場合、Vim が起動されたシェルに戻ることはできません。 CTRL-Z は代わりに Vim ウィンドウを最小化します。

21.2 シェルコマンドの実行

Vim から単一のシェルコマンドを実行するには、":!{command}" を使用します。 たとえば、ディレクトリ一覧を表示するには
:!ls
:!dir
最初は Unix 用、2 番目は MS-Windows 用です。 Vim はプログラムを実行します。 終了すると、<Enter> を押すように求められます。 これにより、編集中のテキストに戻る前に、コマンドの出力を確認できます。 "!" は、プログラムが実行される他の場所でも使用されます。 概要を見てみましょう。
:!{program} {program} を実行する :r !{program} {program} を実行してその出力を :w !{program} {program} を実行してテキストをその入力に送信する :[range]!{program} {program} を介してテキストをフィルタリングする
範囲が "!{program}" の前にあるかどうかが大きな違いを生むことに注意してください。 範囲がない場合はプログラムを通常どおり実行し、範囲がある場合は複数のテキスト行がプログラムを介してフィルタリングされます。
このようにしてプログラムの行全体を実行することは可能です。 しかし、シェルの方がはるかに優れています。 :terminal で新しいシェルを起動できます。
これは、CTRL-Z を使用して Vim を一時停止するのと似ています。 違いは、新しいシェルが起動されることです。

21.3 情報の記憶; ShaDa

しばらく編集した後、レジスタにテキスト、さまざまなファイルにマーク、慎重に作成されたコマンドでいっぱいのコマンドライン履歴が保存されます。 Vim を終了すると、これらはすべて失われます。 しかし、あなたはそれを取り戻すことができます!
ShaDa ファイル (SHAred DAta の略) は、ステータス情報を保存するために設計されています。
コマンドラインと検索パターン履歴 レジスタ内のテキスト さまざまなファイルのマーク バッファリスト グローバル変数
Vim を終了するたびに、この情報は ShaDa ファイルに保存されます。 Vim が再び起動すると、ShaDa ファイルが読み取られ、情報が復元されます。
'shada' オプションは、デフォルトで限られた数のアイテムを復元するように設定されています。 より多くの情報を記憶するように設定することができます。 これは、次のコマンドによって行われます。
:set shada=string
文字列は、何を保存するかを指定します。 この文字列の構文は、オプション文字の後に引数を続けたものです。 オプション/引数のペアはコンマで区切られます。 独自の shada 文字列を作成する方法を見てみましょう。 まず、'オプションを使用して、マークを保存するファイルの数 (a-z) を指定します。 このオプションには、適切な偶数 (たとえば 1000) を選択します。 コマンドは次のようになります。
:set shada='1000
f オプションは、グローバルマーク (A-Z および 0-9) を保存するかどうかを制御します。 このオプションが 0 の場合、何も保存されません。 1 の場合、または f オプションを指定しない場合、マークは保存されます。 この機能が必要なので、今は次のようになります。
:set shada='1000,f1
< オプションは、各レジスタに保存する行数を制御します。 デフォルトでは、すべての行が保存されます。 0 の場合、何も保存されません。 ShaDa ファイルに何千行も追加するのを避けるため (使用されない可能性があり、Vim の起動が遅くなるため)、最大 500 行を使用します。
:set shada='1000,f1,<500
使用できるその他のオプション: : コマンドライン履歴から保存する行数 @ 入力行履歴から保存する行数 / 検索履歴から保存する行数 r マークが保存されないリムーバブルメディア (複数回使用可能) ! 大英字で始まり、小文字を含まないグローバル変数 h 起動時に 'hlsearch' ハイライトを無効にする % バッファリスト (ファイル引数なしで Vim を起動した場合にのみ復元される) c 'encoding' を使用してテキストを変換する n ShaDa ファイルに使用される名前 (最後のオプションでなければならない)
詳細については、'shada' オプションと shada-file を参照してください。
Vim を複数回実行すると、最後に終了した Vim が情報を保存します。 これにより、以前に終了した Vim が保存した情報が失われる可能性があります。 各アイテムは一度だけ記憶できます。

Vim を停止した場所に戻る

ファイルの編集の途中で、休暇に出かける時間になったとします。 Vim を終了して楽しんで、仕事のことはすっかり忘れてしまいます。 数週間後、Vim を起動して次のように入力します。
'0
すると、Vim を終了した場所に戻ります。 作業を続けることができます。 Vim は、Vim を終了するたびにマークを作成します。 最後は '0 です。 '0 が指していた位置は '1 になります。 '1 は '2 に、というように続きます。 マーク '9 は失われます。 :marks コマンドは、'0 から '9 がどこへ移動するかを確認するのに役立ちます。

特定のファイルに戻る

Vim の終了時ではなく、最近編集したファイルに戻りたい場合は、もう少し複雑な方法があります。 次のコマンドを入力すると、ファイルのリストが表示されます。
:oldfiles
1: ~/.config/nvim/init.vim
2: ~/text/resume.txt
3: /tmp/draft
ここで、"2:" が前に付いたリストの 2 番目のファイルを編集したいとします。 次のように入力します。
:e #<2
":e" の代わりに、ファイル名引数を持つ任意のコマンドを使用できます。"#<2" アイテムは、"%" (現在のファイル名) および "#" (代替ファイル名) と同じ場所で機能します。 したがって、ウィンドウを分割して 3 番目のファイルを編集することもできます。
:split #<3
ファイルを編集したいだけの場合は、#<123 は少し複雑です。 幸いなことに、より簡単な方法があります。
:browse oldfiles
1: ~/.config/nvim/init.vim
2: ~/text/resume.txt
3: /tmp/draft
-- 詳細 --
:oldfiles と同じファイルリストが表示されます。 最初に "resume.txt" を編集したい場合は、"q" を押してリストを停止します。 プロンプトが表示されます。
番号を入力して <Enter> を押します (空の場合はキャンセルされます)
"2" と入力して <Enter> を押すと、2 番目のファイルが編集されます。
詳細については、:oldfilesv:oldfilesc_#< を参照してください。

ある Vim から別の Vim に情報を移動する

":wshada" および ":rshada" コマンドを使用して、Vim の実行中に情報を保存および復元できます。 これは、たとえば 2 つの Vim インスタンス間でレジスタの内容を交換する場合に役立ちます。 最初の Vim で次を実行します。
:wshada! ~/tmp/shada
2 番目の Vim で次を実行します。
:rshada! ~/tmp/shada
明らかに、"w" は "write" を、"r" は "read" を表しています。 "!" 文字は、":wshada" によって既存のファイルを強制的に上書きするために使用されます。 省略され、ファイルが存在する場合、情報はファイルにマージされます。 ":rshada" に使用される "!" 文字は、ShaDa ファイルのすべての情報が既存の情報よりも優先されることを意味し、既存の情報が上書きされる可能性があります。 "!" がない場合、設定されていない情報のみが使用されます。 これらのコマンドは、情報を保存して後で再び使用するためにも使用できます。 ShaDa ファイルのディレクトリを作成し、それぞれに異なる目的の情報を格納することができます。

21.4 セッション

編集中に、1 日の終わりになったとします。 作業を終了し、翌日、中断したところから再開したいとします。 編集セッションを保存し、翌日復元することで、これを行うことができます。 Vim セッションには、編集内容に関するすべての情報が含まれています。 これには、ファイルリスト、ウィンドウレイアウト、グローバル変数、オプション、その他の情報などが含まれます。 (正確に何が記憶されるかは、後で説明する 'sessionoptions' オプションによって制御されます。) 次のコマンドは、セッションファイルを作成します。
:mksession vimbook.vim
後でこのセッションを復元したい場合は、次のコマンドを使用できます。
:source vimbook.vim
Vim を起動して特定のセッションを復元したい場合は、次のコマンドを使用できます。
vim -S vimbook.vim
これは、起動時に特定のファイルを読み取るように Vim に指示します。 'S' はセッションを表します (実際には、-S を使用して任意の Vim スクリプトをソースできるため、"source" を表すこともできます)。
開いていたウィンドウは、以前と同じ位置とサイズで復元されます。 マッピングとオプション値は以前と同じです。 正確に何が復元されるかは、'sessionoptions' オプションによって異なります。 デフォルト値は "blank,buffers,curdir,folds,help,options,tabpages,winsize,terminal" です。
blank 空のウィンドウを保持する buffers ウィンドウ内のバッファだけでなく、すべてのバッファ curdir 現在のディレクトリ folds 手動で作成されたものも含む、折りたたみ help ヘルプウィンドウ options すべてのオプションとマッピング tabpages すべてのタブページ winsize ウィンドウサイズ terminal ターミナルウィンドウを含む
これを好みに合わせて変更します。 たとえば、Vim ウィンドウのサイズも復元するには、次を使用します。
:set sessionoptions+=resize
あちらこちらにセッション
セッションを使用する明らかな方法は、異なるプロジェクトで作業する場合です。 セッションファイルを "~/.config/nvim" ディレクトリに保存するとします。 現在 "secret" プロジェクトで作業しており、"boring" プロジェクトに切り替える必要があるとします。
:wall
:mksession! ~/.config/nvim/secret.vim
:source ~/.config/nvim/boring.vim
これは最初に ":wall" を使用して、変更されたすべてのファイルを書き込みます。 次に、":mksession!" を使用して現在のセッションが保存されます。 これにより、以前のセッションが上書きされます。 次回 secret セッションを読み込むと、この時点から続けることができます。 そして最後に、新しい "boring" セッションを読み込みます。
ヘルプウィンドウを開いたり、さまざまなウィンドウを分割して閉じたりして、ウィンドウレイアウトが乱れた場合は、最後に保存したセッションに戻ることができます。
:source ~/.config/nvim/boring.vim
したがって、現在の設定をセッションに保存して次回もそこから続けるか、セッションファイルを Ausgangspunkt として保持するかを完全に制御できます。 セッションを使用する別の方法は、使用するウィンドウレイアウトを作成し、これをセッションに保存することです。 その後、いつでもこのレイアウトに戻ることができます。 たとえば、これは使用するのに適したレイアウトです。
+----------------------------------------+
|                  VIM - main help file  |
|                                        |
|Move around:  Use the cursor keys, or "h|
|help.txt================================|
|explorer   |                            |
|dir        |~                           |
|dir        |~                           |
|file       |~                           |
|file       |~                           |
|file       |~                           |
|file       |~                           |
|~/=========|[No File]===================|
|                                        |
+----------------------------------------+
画面上部にヘルプウィンドウがあり、このテキストを読むことができます。左側の狭い縦長のウィンドウにはファイルエクスプローラーが表示されます。これはディレクトリの内容を一覧表示するVimプラグインです。そこで編集するファイルを選択できます。詳細は次の章で説明します。起動直後のVimで以下のコマンドを実行して、このレイアウトを作成します。
:help
CTRL-W w
:vertical split ~/
ウィンドウのサイズは好みに合わせて変更できます。その後、セッションを保存します。
:mksession ~/.config/nvim/mine.vim
これで、このレイアウトでVimを起動できます。
vim -S ~/.config/nvim/mine.vim
ヒント: エクスプローラーウィンドウに表示されているファイルを空のウィンドウで開くには、カーソルをファイル名に移動して「O」キーを押します。マウスでダブルクリックしても同じことができます。

セッションとSHADA

セッションは多くのものを保存しますが、マークの位置、レジスタの内容、コマンドラインの履歴は保存しません。これらのものを保存するには、shada機能を使用する必要があります。ほとんどの場合、セッションとshadaは別々に使用します。これは、別のセッションに切り替えながら、コマンドラインの履歴を保持するために使用できます。また、あるセッションでテキストをレジスタにヤンクし、別のセッションで貼り付けることもできます。情報をセッションと一緒に保存したい場合もあるでしょう。その場合は、自分で行う必要があります。例:
:mksession! ~/.config/nvim/secret.vim
:wshada! ~/.local/state/nvim/shada/secret.shada
これを復元するには、次のようにします。
:source ~/.config/nvim/secret.vim
:rshada! ~/.local/state/nvim/shada/secret.shada

21.5 ビュー

セッションはVim全体の外観を保存します。1つのウィンドウのプロパティのみを保存する場合は、ビューを使用します。ビューの使用は、特定の方法でファイルを編集する場合に適しています。たとえば、<'number'>オプションで行番号を有効にし、いくつかの折りたたみ(fold)を定義したとします。セッションと同様に、ファイルのこのビューを記憶しておいて、後で復元することができます。実際、セッションを保存すると、各ウィンドウのビューが保存されます。ビューを使用するには、基本的に2つの方法があります。1つ目は、Vimにビューファイルの名前を選択させる方法です。後で同じファイルを編集するときに、ビューを復元できます。現在のウィンドウのビューを保存するには、次のようにします。
:mkview
Vimはビューの保存場所を決定します。後で同じファイルを編集すると、次のコマンドでビューが復元されます。
:loadview
簡単ですね。<'number'>オプションをオフにしたり、すべての折りたたみを開いたりしてファイルを表示したい場合は、オプションを設定してウィンドウをそのように表示することができます。そして、このビューを次のコマンドで保存します。
:mkview 1
もちろん、これを復元するには、次のようにします。
:loadview 1
これで、":loadview"に"1"引数を付けるか付けないかで、ファイルの2つのビューを切り替えることができます。このようにして、同じファイルに対して最大10個のビュー(番号なしのビュー1つと、1から9までの番号付きビュー9つ)を保存できます。
名前付きビュー
ビューを使用する2つ目の基本的な方法は、自分で選択した名前のファイルにビューを保存することです。このビューは、別のファイルを編集中にロードできます。Vimは、ビューで指定されたファイルの編集に切り替えます。したがって、これを使用して、保存したすべてのオプションが設定された別のファイルの編集にすばやく切り替えることができます。たとえば、現在のファイルのビューを保存するには、次のようにします。
:mkview ~/.config/nvim/main.vim
復元するには、次のようにします。
:source ~/.config/nvim/main.vim

21.6 モードライン

特定のファイルを編集するときに、そのファイル専用のオプションを設定することがあります。これらのコマンドを毎回入力するのは面倒です。複数のユーザー間でファイルを共有する場合、セッションやビューを使用してファイルを編集することはできません。この状況に対する解決策は、ファイルにモードラインを追加することです。これは、このファイルでのみ使用されるオプションの値をVimに指示するテキスト行です。典型的な例は、インデントを4つのスペースの倍数で行うCプログラムです。これには、<'shiftwidth'>オプションを4に設定する必要があります。次のモードラインは、これを行います。
/* vim:set shiftwidth=4: */ ~
この行をファイルの最初の5行または最後の5行のいずれかに配置します。ファイルを編集すると、<'shiftwidth'>が4に設定されていることがわかります。別のファイルを編集すると、デフォルト値の8に戻ります。一部のファイルでは、モードラインはヘッダーによく適合するため、ファイルの先頭に配置できます。テキストファイルなど、モードラインが通常のコンテンツの邪魔になるファイルの場合は、ファイルの末尾に配置します。
<'modelines'>オプションは、ファイルの先頭と末尾の何行をモードラインの有無について検査するかを指定します。10行を検査するには、次のようにします。
:set modelines=10
<'modeline'>オプションを使用して、これをオフにすることができます。Unixでrootとして、またはMS-Windowsで管理者として作業している場合、または編集しているファイルが信頼できない場合は、これを実行してください。
:set nomodeline
モードラインには、次の形式を使用します。
any-text vim:set {option}={value} ... : any-text
"any-text"は、Vimが使用する部分の前後に任意のテキストを配置できることを示します。これにより、上記のように「/*」と「*/」を使用してコメントのように見せることができます。" vim:"の部分は、Vimがこの行を認識するものです。"vim"の前に空白文字があるか、"vim"が行の先頭にある必要があります。したがって、「gvim:」のようなものを使用しても機能しません。コロンの間の部分は":set"コマンドです。コロンの前にバックスラッシュを挿入する必要があることを除いて、":set"コマンドを入力するのと同じように機能します(そうしないと、モードラインの終わりと見なされます)。
別の例:
// vim:set textwidth=72 dir=c\:\tmp:  use c:\tmp here
最初のコロンの前にバックスラッシュが追加されているため、":set"コマンドに含まれます。2番目のコロンの後のテキストは無視されるため、そこにコメントを配置できます。
詳細はmodelineを参照してください。
次の章: usr_22.txt 編集するファイルを見つける
著作権: manual-copyright を参照してください vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンドインデックス
クイックリファレンス