「Vim」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(2人の利用者による、間の12版が非表示)
4行目: 4行目:
 
[[en:Vim]]
 
[[en:Vim]]
 
[[es:Vim]]
 
[[es:Vim]]
[[it:Vim]]
+
[[pt:Vim]]
[[lt:Vim]]
 
 
[[ru:Vim]]
 
[[ru:Vim]]
 
[[zh-hans:Vim]]
 
[[zh-hans:Vim]]
[[zh-hant:Vim]]
 
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|アプリケーション一覧/ドキュメント#Vi テキストエディタ}}
 
{{Related|アプリケーション一覧/ドキュメント#Vi テキストエディタ}}
126行目: 124行目:
 
Vim のユーザー別の設定ファイルはホームディレクトリに配置されます: {{ic|~/.vimrc}}。カレントユーザーの Vim ファイルは {{ic|~/.vim/}} の中に配置されます。グローバルな設定ファイルは {{ic|/etc/vimrc}} にあります。グローバルな Vim ファイルは {{ic|/usr/share/vim/}} の中にあります。
 
Vim のユーザー別の設定ファイルはホームディレクトリに配置されます: {{ic|~/.vimrc}}。カレントユーザーの Vim ファイルは {{ic|~/.vim/}} の中に配置されます。グローバルな設定ファイルは {{ic|/etc/vimrc}} にあります。グローバルな Vim ファイルは {{ic|/usr/share/vim/}} の中にあります。
   
  +
gVim の場合、ユーザー固有の設定ファイルは {{ic|~/.gvimrc}} にあり、グローバル設定ファイルは {{ic|/etc/gvimrc}} にあります。
{{Note|シンタックスハイライトなどの一般的な機能は {{ic|defaults.vim}} で有効になっており、{{ic|~/.vimrc}} が存在しない場合にロードされます。{{ic|1=let skip_defaults_vim=1}} を {{ic|/etc/vimrc}} に追加することで {{ic|defaults.vim}} のロードを完全に無効化できます [https://github.com/vim/vim/issues/1033]。}}
 
   
  +
{{Note|
===折り返し検索===
 
  +
* シンタックスハイライトなどの一般的な機能は {{ic|defaults.vim}} で有効になっており、{{ic|~/.vimrc}} が存在しない場合にロードされます。{{ic|1=let skip_defaults_vim=1}} を {{ic|/etc/vimrc}} に追加することで {{ic|defaults.vim}} のロードを完全に無効化できます [https://github.com/vim/vim/issues/1033]
 
オプションを使うと、''次を検索''でファイルの末尾まで達たとき、ファイルの先頭に飛ぶようになります。同じく''前を検索''で先頭に達したらファイルの末尾まで移動します。
+
* gVim は Vim と gVim 設定ファイルの両方をロードしますVim は Vim の設定ファイルのみをロードします。
  +
}}
   
 
set wrapscan
 
set wrapscan
139行目: 138行目:
   
 
デフォルトのレジスタを変更するには {{ic|1=:set clipboard=unnamedplus}} で {{ic|"+}} レジスタを使うことができます。{{ic|"+}} レジスタは X の {{ic|CLIPBOARD}} バッファに相当します。
 
デフォルトのレジスタを変更するには {{ic|1=:set clipboard=unnamedplus}} で {{ic|"+}} レジスタを使うことができます。{{ic|"+}} レジスタは X の {{ic|CLIPBOARD}} バッファに相当します。
  +
{{ic|clipboard}} オプションはカンマ区切りの値に設定できることに注意してください。{{ic|1=:set Clipboard=unnamedplus,unnamed}} の場合、ヤンク操作では、ヤンクされたテキストが {{ic|"+}} レジスタに加えて {{ic|"*}} レジスタにもコピーされます。(ただし、削除、変更、および配置の操作は、依然として {{ic|"+}} レジスタに対してのみ実行されます)
   
  +
詳細については、{{ic|:help 'clipboard'}}を参照してください。{{ic|clipboard}} 機能に設定できる値は他にもあります。{{ic|:help Clipboard-unnamed}} を使用すると、この機能に設定できる最初の有効な値のヘルプ トピックに移動し、続いて他のすべての有効な値のヘルプに移動できます。
詳しくは {{ic|:help 'clipboard'}} を参照してください。
 
   
  +
{{Tip|
{{Tip|コピーやペースト操作をするためのカスタムショートカットを作成することもできます。例えば [https://superuser.com/a/189198] では {{ic|ctrl+c}}, {{ic|ctrl+v}}, {{ic|ctrl+x}} をバインドしています。}}
 
  +
* コピー&ペースト操作のためのカスタムショートカットを作成できます。{{ic|Ctrl+c}}、{{ic|Ctrl+v}}、および {{ic|Ctrl+x}} のバインディングについては、[https://superuser.com/a/189198] を参照してください。
  +
* X クリップボードは vim が終了するとフラッシュされます。vim の選択を X クリップボード内で永続的にするには、[[クリップボードマネージャ]] が必要です。あるいは、 {{ic|autocmd VimLeave * call system("echo -n $'" . escape(getreg(), "'") . "' {{!}} xsel --input --clipboard")}} を {{ic|.vimrc}} に追加します。({{Pkg|xsel}} パッケージが必要です)
  +
}}
   
 
===シンタックスハイライト===
 
===シンタックスハイライト===
156行目: 159行目:
   
 
:filetype indent on
 
:filetype indent on
  +
  +
=== 折返し表示 ===
  +
  +
{{ic|wrap}} オプションはデフォルトでオンになっており、ウィンドウの幅より長い行を折り返し、残りの行を次の行に表示するように Vim に指示します。{{ic|wrap}} オプションはテキストの表示方法のみに影響し、テキスト自体は変更されません。
  +
  +
折り返しは通常、単語の途中であっても、ウィンドウに収まる最後の文字の後に行われます。よりインテリジェントな折り返しは {{ic|linebreak}} オプションで制御できます。{{ic|set linebreak}} で有効にすると、{{ic|breakat}} 文字列オプションにリストされた文字の後に折り返しが発生します。
  +
  +
折り返された行は通常、インデントに関係なく次の行の先頭に表示されます。[https://retracile.net/wiki/VimBreakIndent breakindent] オプションは、長い行を折り返すときにインデントを考慮し、折り返された行が前に表示されていた行と同じインデントを保つように Vim に指示します。{{ic|breakindent}} の動作は {{ic|breakindentopt}} オプションで微調整することができ、例えば Python ファイルでは折り返す行をさらに 4 スペース右にずらすことができます (詳細は{{ic|:help breakindentopt}} を参照してください):
  +
  +
autocmd FileType python set breakindentopt=shift:4
   
 
===マウスを使う===
 
===マウスを使う===
166行目: 179行目:
 
{{ic|~/.vimrc}} が存在しない場合 {{ic|1=mouse=a}} オプションを {{ic|defaults.vim}} に設定することで読み込まれます。
 
{{ic|~/.vimrc}} が存在しない場合 {{ic|1=mouse=a}} オプションを {{ic|defaults.vim}} に設定することで読み込まれます。
   
{{Note|ターミナルでマウスを有効にすると、X サーバーにアクセスできる場合、コピーペーストは {{ic|"*}} レジスタを使うようになります。Shift キーを押すことで xterm によるマウスボタンの処理を利用できます。{{ic|clipboard}} オプションも参照してください。}}
+
{{Note|ターミナルでマウスを有効にすると、X サーバーにアクセスできる場合、コピー&ペーストは {{ic|"*}} レジスタを使うようになります。Shift キーを押すことで xterm によるマウスボタンの処理を利用できます。{{ic|clipboard}} オプションも参照してください。}}
   
 
===矢印キーによる行移動===
 
===矢印キーによる行移動===
174行目: 187行目:
 
{{ic|~/.vimrc}} ファイルに {{ic|1=set whichwrap=b,s,<,>,[,]}} を追加することでこのデフォルトの挙動を変更することができます。
 
{{ic|~/.vimrc}} ファイルに {{ic|1=set whichwrap=b,s,<,>,[,]}} を追加することでこのデフォルトの挙動を変更することができます。
   
=== サンプ~/.vimrc ===
+
== ファイのマージ ==
 
[[#設定 2]]を見て下さい。
 
 
==ファイルのマージ (vimdiff)==
 
   
 
Vim には差分エディタが入っています。2つ (もしくはそれ以上) のファイルの差分をマージするのを助けるプログラムです。{{ic|vimdiff}} は横にマルチペイン表示を行って差分を色でハイライトします、それぞれのペインには確認・編集するファイルが開かれます。Vim には[[#使用方法|複数のモード]]が存在しますが、重要なのは文章を編集する'''挿入モード'''と、ウィンドウや行をわたってカーソルを移動する'''コマンドモード'''の2つです。{{ic|vimdiff file1 file2}} を実行して起動します。以下はいくつかのコマンドの例です。
 
Vim には差分エディタが入っています。2つ (もしくはそれ以上) のファイルの差分をマージするのを助けるプログラムです。{{ic|vimdiff}} は横にマルチペイン表示を行って差分を色でハイライトします、それぞれのペインには確認・編集するファイルが開かれます。Vim には[[#使用方法|複数のモード]]が存在しますが、重要なのは文章を編集する'''挿入モード'''と、ウィンドウや行をわたってカーソルを移動する'''コマンドモード'''の2つです。{{ic|vimdiff file1 file2}} を実行して起動します。以下はいくつかのコマンドの例です。
   
  +
{| class="wikitable"
;{{ic|]c}} : 次の差分
 
  +
! アクション !! ショートカット
;{{ic|[c}} : 前の差分
 
  +
|-
;{{ic|i}} : 挿入モードに入る
 
  +
| 次の差分 || {{ic|]c}}
;{{ic|Esc}} : 挿入モードを出る
 
  +
|-
;{{ic|p}} : 貼り付け
 
  +
| 前の差分 || {{ic|[c}}
;{{ic|do}} : diff obtain。カーソルが(ハイライトされた)差分の上にあるとき、もうひとつのウィンドウから現在のウィンドウに差分をコピー。
 
  +
|-
;{{ic|dp}} : diff put。diff obtain の逆で、現在のウィンドウからもうひとつのウィンドウへ差分をコピー。
 
  +
| カーソルが (ハイライトされた) 差分の上にあるとき、もうひとつのウィンドウから現在のウィンドウに差分をコピー || {{ic|do}}
;{{ic|zo}} : 折り畳まれた文章を開く
 
  +
|-
;{{ic|zc}} : 折り畳まれた文章を閉じる
 
  +
| 現在のウィンドウからもうひとつのウィンドウへ差分をコピー || {{ic|dp}}
;{{ic|<nowiki>:</nowiki>diffupdate}} : ファイルの差分を再スキャン
 
  +
|-
;{{ic|yy}} : 行をコピー
 
  +
| 折り畳まれた文章を開く || {{ic|zo}}
;{{ic|dd}} : 行を切り取り
 
  +
|-
;{{ic|:wq}} : 現在のウィンドウを保存して終了
 
  +
| 折り畳まれた文章を閉じる || {{ic|zc}}
;{{ic|:wqa}} : 両方のウィンドウを保存して終了
 
  +
|-
;{{ic|:q!}} : 保存せずに終了
 
  +
| ファイルの差分を再スキャン || {{ic|:diffupdate}}
 
  +
|}
ファイルを編集したら、file.pacnew の変更を考慮して:
 
# mv file file.bck
 
# mv file.pacnew file
 
新しいファイルが正しいか確認してから、バックアップを削除:
 
# rm file.bck
 
   
==Vim ヒント==
+
== ヒントとテクニック ==
   
 
作業を完遂するための特定のユーザーのトリック。
 
作業を完遂するための特定のユーザーのトリック。
233行目: 238行目:
 
* FileType プラグインとファイルタイプを検出するカスタムルールを使うことで任意のファイルタイプ (例: *.txt) のスペルチェックを有効にすることができます。名前の最後が {{ic|*.txt}} で終わるファイルのスペルチェックを有効にするには、{{ic|/usr/share/vim/vimfiles/ftdetect/plaintext.vim}} ファイルを作成して、{{ic|autocmd BufRead,BufNewFile *.txt setfiletype plaintext}} という行をファイルの中に記述します。そうしたら、{{ic|1=autocmd FileType plaintext setlocal spell spelllang=en_us}} を {{ic|~/.vimrc}} や {{ic|/etc/vimrc}} に追加して、Vim を再起動してください。もしくは、{{ic|~/.vimrc}} または {{ic|/etc/vimrc}} に {{ic|autocmd BufRead,BufNewFile *.txt setlocal spell}} 行を追加してから Vim を再起動してください。スペルチェックを使用するファイルタイプ ({{ic|*.txt}}) を指定するようにしてください。}}
 
* FileType プラグインとファイルタイプを検出するカスタムルールを使うことで任意のファイルタイプ (例: *.txt) のスペルチェックを有効にすることができます。名前の最後が {{ic|*.txt}} で終わるファイルのスペルチェックを有効にするには、{{ic|/usr/share/vim/vimfiles/ftdetect/plaintext.vim}} ファイルを作成して、{{ic|autocmd BufRead,BufNewFile *.txt setfiletype plaintext}} という行をファイルの中に記述します。そうしたら、{{ic|1=autocmd FileType plaintext setlocal spell spelllang=en_us}} を {{ic|~/.vimrc}} や {{ic|/etc/vimrc}} に追加して、Vim を再起動してください。もしくは、{{ic|~/.vimrc}} または {{ic|/etc/vimrc}} に {{ic|autocmd BufRead,BufNewFile *.txt setlocal spell}} 行を追加してから Vim を再起動してください。スペルチェックを使用するファイルタイプ ({{ic|*.txt}}) を指定するようにしてください。}}
   
===行の置換===
+
===状態保存 ===
   
  +
通常、{{ic|vim}} を終了すると、開いているファイル、コマンドラインの履歴、ヤンクしたテキストなど、必要のない情報はすべて破棄されます。この情報を保存するかどうかは、以下の方法で設定できます。
特定の行だけで置換を行うには:
 
   
  +
==== viminfo ファイル ====
:''n'',''n''s/one/two/g
 
   
  +
また、{{ic|viminfo}} ファイルには、コマンドライン履歴、検索文字列履歴、入力行履歴、レジスタの内容、ファイルのマーク、ファイル内の位置マーク、最後の検索/置換パターン (セッション内で {{ic|n}} と {{ic|&}} による検索モードで使用)、バッファリスト、定義済みのあらゆるグローバル変数を保存するために使用されることがあります。{{ic|viminfo}} モダリティを使用するには、インストールした {{ic|vim}} のバージョンが {{ic|+viminfo}} 機能付きでコンパイルされている必要があります。
例えば、3行目と4行目で 'one' を 'two' に置き換えるには、次を実行します:
 
   
  +
{{ic|viminfo}} ファイルに何を残すかを設定するには、例えば {{ic|~/.vimrc}} ファイルに以下のように記述します。
:3,4s/one/two/g
 
   
  +
set viminfo='10,<100,:100,%,n~/.vim/.viminfo
===Vim にファイルのカーソル位置を記憶させる===
 
   
  +
各パラメータの前には識別子が付きます:
前回ファイルを開いたときのカーソル位置を復元させたいときは、以下を {{ic|~/.vimrc}} に追加してください:
 
   
  +
'q : q, 記憶された編集済みファイルの数
{{bc|<nowiki>
 
  +
<m : m, 各レジスタに保存される行数
if has("autocmd")
 
  +
:p : p, 記憶された履歴コマンド行の数
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
 
  +
% : バッファリストを保存して復元します
endif
 
  +
n...: viminfo ファイルへの完全修飾パス (これはリテラル "''n''" であることに注意してください。)
</nowiki>}}
 
   
  +
既存の {{ic|viminfo}} ファイルが現在のセッション情報、例えばあなたが終了しようとしている現在のセッションのいくつかのバッファから更新されるときに、どのように変更されるかの詳細については、公式 [https://vimdoc.sourceforge.net/htmldoc/options.html#'viminfo' viminfo documentation] をご覧ください。
Vim Wiki の [http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session この] tip を参照。
 
   
  +
==== セッションファイル ====
===gVim ウィンドウの底部の空きスペース===
 
ウィンドウサイズのヒントを無視するように設定された[[ウィンドウマネージャ]]を使っている場合、gVim は空の領域を GTK テーマの背景色で塗りつぶします。
 
   
  +
セッションファイルは、任意の数の特定のセッションの状態を長期にわたって保存するために使用できます。各セッションやプロジェクトに1つの個別のセッションファイルを使用することができます。このモダリティを使用するには、インストールした {{ic|vim}} のバージョンが {{ic|+mksession}} 機能付きでコンパイルされている必要があります。
解決方法はウィンドウ下部の gVim が確保するスペースを調整することです。ゼロに設定した場合、下の横スクロールバーが見えなくなってしまうことがあるので注意してください。次の行を {{ic|~/.vimrc}} に記述します:
 
   
  +
セッション内で {{ic|:mksession[!] [''my_session_name.vim'']}} はカレントディレクトリの {{ic|''my_session_name.vim''}} に vim-script を書き出します。ファイル名を ''not'' にするとデフォルトで {{ic|Session.vim}} が使われます。オプションの {{ic|!}} は、同じ名前とパスの既存のセッションファイルを破棄します。
set guiheadroom=0
 
  +
  +
{{ic|vim}} セッションは、ターミナルから ''vim'' を起動するときに再開できます:
  +
  +
$ vim -S [''my_session_name.vim'']
  +
  +
または、vim コマンドを実行して、既に開いているセッション バッファーで次のようにします。
  +
  +
:source ''my_session_name.vim''
  +
  +
保存される内容やセッションファイルのオプションの詳細については、[https://vimdoc.sourceforge.net/htmldoc/usr_21.html#21.4 vim documentation] で詳しく説明されています。コメント付きの例は、[https://vim.wikia.com/wiki/Go_away_and_come_back ここ] にあります。
  +
  +
==== カーソル位置の保存 ====
  +
  +
こちらを参照 [https://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session Restore cursor to file position in previous editing session]
  +
  +
===vi コマンドを vim で置き換える===
  +
  +
{{ic|vi}} を {{ic|vim}} にする [[Bash#エイリアス|エイリアス]] を作成してください。
  +
  +
もしくは、{{ic|sudo vi}} と入力したときに {{ic|vim}} が起動するようにしたい場合、{{AUR|vi-vim-symlink}} をインストールしてください。{{ic|vi}} が削除され {{ic|vim}} のシンボリックリンクで置き換えられます。
   
 
=== DOS/Windows のキャリッジリターン (CR)===
 
=== DOS/Windows のキャリッジリターン (CR)===
  +
 
行末に "^M" が表示されることがあります。これは MS-DOS や Windows で作成したテキストファイルを編集しようとしたときに起こります。
 
行末に "^M" が表示されることがあります。これは MS-DOS や Windows で作成したテキストファイルを編集しようとしたときに起こります。
   
276行目: 301行目:
 
{{Note|{{ic|fileformat}} の設定を変えるという方法もあります。{{ic|<nowiki>set ff=unix</nowiki>}} で DOS/Windows の改行コードが使われているファイルを Unix の改行コードに変換できます。逆をしたい場合、{{ic|<nowiki>set ff=dos</nowiki>}} で Unix の改行コードが DOS/Windows の改行コードに変換されます。}}
 
{{Note|{{ic|fileformat}} の設定を変えるという方法もあります。{{ic|<nowiki>set ff=unix</nowiki>}} で DOS/Windows の改行コードが使われているファイルを Unix の改行コードに変換できます。逆をしたい場合、{{ic|<nowiki>set ff=dos</nowiki>}} で Unix の改行コードが DOS/Windows の改行コードに変換されます。}}
   
===vi コマンドを vim で置換える===
+
=== gVim ウィンドウの底部の空スペース ===
   
  +
ウィンドウサイズのヒントを無視するように設定された[[ウィンドウマネージャ]]を使っている場合、gVim は空の領域を GTK テーマの背景色で塗りつぶします。
{{ic|vi}} を {{ic|vim}} にする[[Bash#エイリアス|エイリアス]]を作成してください。
 
   
  +
解決方法はウィンドウ下部の gVim が確保するスペースを調整することです。ゼロに設定した場合、下の横スクロールバーが見えなくなってしまうことがあるので注意してください。次の行を {{ic|~/.vimrc}} に記述します:
もしくは、{{ic|sudo vi}} と入力したときに {{ic|vim}} が起動するようにしたい場合、{{AUR|vi-vim-symlink}} をインストールしてください。{{ic|vi}} が削除され {{ic|vim}} のシンボリックリンクで置き換えられます。
 
  +
  +
set guiheadroom=0
   
 
=== Vim をページャとして使う ===
 
=== Vim をページャとして使う ===
304行目: 331行目:
 
* この動作は、{{ic|s}} や {{ic|g}} などの正規表現を含む他のコマンドで正規表現を照合するときにも表示されます。
 
* この動作は、{{ic|s}} や {{ic|g}} などの正規表現を含む他のコマンドで正規表現を照合するときにも表示されます。
 
}}
 
}}
  +
  +
=== XDG Base Directory 仕様の回避策 ===
  +
  +
[https://github.com/vim/vim/commit/6a459902592e2a4ba68 7.3.1178] 以降、{{ic|~/.vimrc}} が見つからない場合、vim は {{ic|~/.vim/vimrc}} を検索します。
  +
  +
{{hc|"$XDG_CONFIG_HOME"/vim/vimrc|<nowiki>
  +
set runtimepath^=$XDG_CONFIG_HOME/vim
  +
set runtimepath+=$XDG_DATA_HOME/vim
  +
set runtimepath+=$XDG_CONFIG_HOME/vim/after
  +
  +
set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim
  +
set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after
  +
  +
let g:netrw_home = $XDG_DATA_HOME."/vim"
  +
call mkdir($XDG_DATA_HOME."/vim/spell", 'p')
  +
  +
set backupdir=$XDG_STATE_HOME/vim/backup | call mkdir(&backupdir, 'p')
  +
set directory=$XDG_STATE_HOME/vim/swap | call mkdir(&directory, 'p')
  +
set undodir=$XDG_STATE_HOME/vim/undo | call mkdir(&undodir, 'p')
  +
set viewdir=$XDG_STATE_HOME/vim/view | call mkdir(&viewdir, 'p')
  +
  +
if !has('nvim') | set viminfofile=$XDG_STATE_HOME/vim/viminfo | endif
  +
</nowiki>}}
  +
  +
{{hc|~/.profile|2=
  +
export GVIMINIT='let $MYGVIMRC="$XDG_CONFIG_HOME/vim/gvimrc" {{!}} source $MYGVIMRC'
  +
export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" {{!}} source $MYVIMRC'
  +
}}
  +
  +
{{ic|[G]VIMINIT}} 環境変数は、Neovim にも影響します。Vim と Neovim に個別の設定が必要な場合は、次の方が適切な選択になります:
  +
export GVIMINIT='let $MYGVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/gvimrc" : "$XDG_CONFIG_HOME/nvim/init.gvim" | so $MYGVIMRC'
  +
export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.vim" | so $MYVIMRC'
  +
  +
* https://jorengarenar.github.io/blog/vim-xdg
  +
* https://tlvince.com/vim-respect-xdg
   
 
== プラグイン ==
 
== プラグイン ==
   
vim にプラグインを追加することで生産力を向上させることができます。
+
vim にプラグインを追加することで、Vim の機能が拡張され、生産性が向上します。プラグインは、Vim の UI の変更、新しいコマンドの追加、コード補完サポートの有効化、他のプログラムやユーティリティと Vim との統合、追加言語のサポートの追加などを行うことができます。
  +
  +
{{Tip|人気のあるプラグインのリストについては、[https://vimawesome.com/ Vim Awesome] を参照してください。}}
   
 
=== インストール ===
 
=== インストール ===
313行目: 377行目:
 
==== 内蔵のパッケージマネージャを使う ====
 
==== 内蔵のパッケージマネージャを使う ====
   
Vim 8 からサードパーティのプラグインをロードる機能がネイティブで追加されてい。サードパーティのパッケージを {{ic|~/.vim/pack/foo}} に保存することで使用すことができます。
+
Vim 8 では、サードパーティのプラグインをネイティブにロードできる機能が追加されましたこの機能は、サードパーティのパッケージを {{ic|~/.vim/pack}} フォルダーに保存することで使用できまのフォルダーの構造は、通常プラグインごに1つのディレクトリを持つ一般的なプラグインマネージャーの構造とは少し異なります。以下は一般的なインストール手順とディレクトリ構造です (例として [https://github.com/tpope/vim-surround Tim Pope の vim-surround プラグイン] を使用):
  +
  +
$ mkdir -p ~/.vim/pack/tpope/start
  +
  +
{{ic|~/.vim/pack/tpope}} はパッケージディレクトリであり、[https://vimhelp.org/repeat.txt.html#packages Vim documentation] では1つ以上のプラグインを含むディレクトリとして大まかに定義されていることに注意することが重要です。ただし、プラグインリポジトリはこのディレクトリにダウンロードしないでください。パッケージディレクトリの名前も任意です。すべてのプラグインを1つのパッケージディレクトリに保存するか、この例のように作成者の GitHub 名 {{ic|tpope}} を使用するかを選択できます。
  +
  +
パッケージディレクトリには次のサブフォルダーを含めることができます:
  +
  +
* {{ic|start}} - このサブフォルダーのプラグインは、Vim の起動時に自動的にロードされます。ここは最も頻繁に使用される場所です。
  +
* {{ic|opt}} - このサブフォルダーのプラグインは、Vim 内で {{ic|:packadd}} コマンドを発行することでオンデマンドでロードできます。
  +
  +
次に、{{ic|start}} フォルダーに移動し、プラグインリポジトリをチェックアウトします:
  +
  +
$ cd ~/.vim/pack/tpope/start
  +
$ git clone https://tpope.io/vim/surround.git
  +
  +
これにより、追加のサブフォルダー {{ic|~/.vim/pack/tpope/start/surround}} が作成され、そこにプラグインファイルが配置されます。
  +
  +
次に、プラグインにヘルプファイルが含まれている場合は、ヘルプインデックスを更新します:
  +
  +
$ vim -u NONE -c "helptags surround/doc" -c q
  +
  +
これで Vim の起動時にプラグインが自動的にロードされるようになります。プラグイン固有のオプションを除き、{{ic|~/.vimrc}} を変更する必要はありません。
   
 
==== プラグインマネージャを使う ====
 
==== プラグインマネージャを使う ====
   
プラグインマネージャを使うことで Vim を実行しているプラットフォムから独立して Vim プラグインをインストール管理することがきます。以下が他 Vim プラグインのパジマネージャとして使えるプラグインす。
+
プラグインマネージャーは、Vim プラグインをインストール管理、更新するプラグインです。これは、Arch Linux のプラットフォムでも Vim を使用していて、プラグインを更新する一貫した方法が必要な場合に役立ちます。
   
* [https://github.com/Shougo/neobundle.vim Neobundle] は Vundle をベースにして作られた、現在 Vim で最も人気があるプラグインマネージャですが、開発は今後保守だけになると開発者によって発表されています。
+
* [https://github.com/junegunn/vim-plug Vim-plug] はミニマルな Vim プラグインマネージャです。必要応じてプラグインをロードしたり並列アップデートどの多数の機能を備えています。{{AUR|vim-plug}} または {{AUR|vim-plug-git}} として利用できます。
* [https://github.com/Shougo/dein.vim Dein.vim] NeoBundle の開発者が新に開発している Vim/[[Neovim]] のプラグインマネージャです。開発者曰くこちらに移行して欲しいとのこと。{{AUR|vim-dein-git}} でインストールできます。
+
* [https://github.com/gmarik/Vundle.vim Vundle] {{AUR|vundle}} {{AUR|vundle-git}} として利用できます。
* [https://github.com/gmarik/Vundle.vim Vundle] Vim で人気があるプラグインマネージャです。
+
* [https://github.com/tpope/vim-pathogen pathogen.vim] Vim のランタイムパスを管理すためのシンプルなプラグインで、{{AUR|vim-pathogen}} または {{AUR|vim-pathogen-git}} として利用できます。
* [https://github.com/junegunn/vim-plug Vim-plug] はミニマルな Vim プラグインマネージャです。必要に応じてプラグインをロドしり並列アップデートなどの多数の機能を備えます。
+
* [https://github.com/Shougo/dein.vim Dein.vim] [https://github.com/Shougo/neobundle.vim NeoBundle] に代わるプラグインマネージャーで、{{AUR|vim-dein}} まは {{AUR|vim-dein-git}} とし入手できます。
* [https://github.com/tpope/vim-pathogen pathogen.vim] は Vim のランタイムパスを管理するシンプルなプラグインです。
 
   
 
==== Arch のリポジトリを使う ====
 
==== Arch のリポジトリを使う ====
375行目: 460行目:
 
nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>
 
nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>
   
=== Taglist ===
+
==== Taglist ====
   
 
[http://vim-taglist.sourceforge.net/ Taglist] はソースコードファイルの構造の概観を提供し、様々なプログラミング言語で書かれたソースコードファイルを効率的に閲覧できるようにします。
 
[http://vim-taglist.sourceforge.net/ Taglist] はソースコードファイルの構造の概観を提供し、様々なプログラミング言語で書かれたソースコードファイルを効率的に閲覧できるようにします。
392行目: 477行目:
   
 
Vim の GTK3GUI は GTK2 バージョンよりも遅い場合があります({{Bug|51366}} を参照) {{Aur|gvim-gtk2}} を回避策としてインストールしてみて下さい。
 
Vim の GTK3GUI は GTK2 バージョンよりも遅い場合があります({{Bug|51366}} を参照) {{Aur|gvim-gtk2}} を回避策としてインストールしてみて下さい。
  +
  +
=== 双方向サポート ===
  +
  +
Vim は依然として [[双方向テキスト#サポート|完全な双方向サポートが不足]] であり、これは端末によって異なります。
  +
  +
{{ic|:rightleft}} を使用してテキストの位置を強制的に揃えます。以下を使用してキーバインドに割り当てることができます。
  +
  +
inoremap <C-X> <C-O>:silent if &rl <Bar> set rl! <Bar> else <Bar> set rl <Bar> endif<CR>
  +
  +
Vim には独自の文字整形機能があります。いくつかの [https://github.com/vim/vim/issues/14115 レンダリングの問題] にもかかわらず、これは [[alacritty]] や [[st]] のような文字整形をサポートしていない端末でも機能します。整形は [http://unicode.org/charts/PDF/UFE70.pdf アラビア語プレゼンテーションフォーム-B (U+FE70–FEFF)] に依存するため、フォントにこれらの文字のサポートが含まれていることを確認してください。これらの文字を完全にサポートする既知の等幅フォントがないため、追加のフォールバックフォント (例: {{pkg|ttf-dejavu}} へのフォールバックを備えた {{AUR|vazir-code-fonts}}) が必要です。端末フォントの設定例については、[[St#アラビア語シェーピングのサポート]] を参照してください。
  +
  +
ただし、端末が gnome-terminal やその他の libvte ベースの端末のような文字整形をサポートしている場合、Vim と端末の文字整形が競合する可能性があります。現在の回避策は、{{ic|:set arabicshape!}} による整形を無効にすることですが、これにより、{{ic|:set rightleft}} のときにテキストが反転してしまうことに注意してください。詳細については、[https://vim-jp.org/vimdoc-en/arabic.html :set arabic] を参照してください。
   
 
==参照==
 
==参照==

2024年3月31日 (日) 21:07時点における最新版

関連記事

Vim は、ターミナルテキストエディタです。vi の拡張版で、シンタックスハイライト、包括的なヘルプシステム、ネイティブスクリプト (Vim script)、テキスト選択のためのビジュアルモード、ファイルの比較 (vimdiff(1)) といった追加機能、および rview(1)rvim(1) など制限付きのツールが含まれています。

インストール

以下のどちらかのパッケージをインストールしてください:

  • vim パッケージは Python 2/3, Lua, Ruby, Perl インタプリタをサポート、GTK/X サポートは除外。
  • gvim パッケージは上の vim パッケージと同じものに加えて GTK/X サポートが付属。
ノート:
  • vim パッケージには Xorg のサポートが組み込まれていません。従って、+clipboard 機能がないため、Vim は X11 のプライマリ・クリップボードのセレクションバッファを利用することができません。gvim パッケージには +clipboard が有効になっている完全な X サポートが入った Vim の CLI バージョンも含まれています。
  • 非公式の herecura リポジトリには様々な種類の Vim / gVim が取り揃えられています: vim-cli, vim-gvim-common, vim-gvim-gtk, vim-gvim-qt, vim-rt, vim-tiny

使用方法

これは Vim の使用方法に関する基本的な概略です。また、vimtutor もしくは gvimtutor を実行すると25-30分ほどの vim のチュートリアルが起動します。

Vim には4つのモードが備わっています:

  • コマンドモード: キー入力はコマンドとして解釈されます。
  • 挿入モード: キー入力はファイルに挿入されます。
  • ビジュアルモード: キー入力でテキストを選択・カット・コピーします。
  • Ex モード: 追加的なコマンドのための入力モード (例: ファイルの保存, テキストの置換...)

編集の基本

次のように Vim を起動すると:

$ vim somefile.txt

空のドキュメントが表示されます (somefile.txt が存在しない場合。存在するときは、その中身が表示されます) このまま編集することはできません – 今いるのはコマンドモードです。このモードではキーボードを使って Vim にコマンドを実行させることができます。

ノート: Vim は典型的な古典的 Unix スタイルのソフトウェアです。学習曲線は急峻ですが、一度初めてしまえば、Vim がとても強力なのがわかるでしょう。また、全てのコマンドは大文字・小文字を区別します。場合によって大文字のコマンドはその元のコマンドを「大雑把にした」コマンドだったり (s は文字を置き換え、S は行を置き換えます)、または全く違うコマンドだったりします (j は下に移動しますが、J は2行を結合します)

i コマンドで (カーソルの前に) テキストを挿入します。I (大文字の i) は行の最初にテキストを挿入します。テキストの追記 (カーソルの後ろにテキストを記述、ほとんどの人が予期するであろう挿入) には a を使います。A を入力するとカーソルが行末に置かれます。

Esc を押すことでいつでもコマンドモードに戻ることができます。

移動

Vim では、矢印キーを使ってカーソルを移動することができますが、これは Vim の流儀とは言えません。標準のタイピングポジションから矢印キーまで右手を動かしたり、戻したりすることになります。楽しくありません。

Vim においては j を押すことで下に移動できます。“j” は垂れ下がっていると覚えて下さい。逆に k を押すことでカーソルを上に移動できます。左は h で (“j” の左にあります)、右は l です (小文字の L)

^ はカーソルを行の最初に、$ は最後に移動します。

ノート: 一般的に ^$ は正規表現で、行の最初と最後にマッチするものとして使われます。正規表現はかなり強力で *nix 環境では大抵使われています。初めは取っ掛かりにくいように感じられるかもしれませんが、そのうちにほとんどのキーマッピングにはある「思想」が共通していることに気がつくでしょう。

次の単語に進むには、w キーを押します。W はより多くの文字列を単語として考えます (例えばアンダースコアやダッシュを単語の一部としてみなします) 前の単語に戻るには、b を使います。同じように、B は Vim が単語としてみなすものにより多くの文字列を含めます。単語の末尾に移動するには、e を使い、E はより多くの文字列を含めて考えます。

文の最初に移動したいときは、( を使います。) は反対に、センテンスの最後まで移動します。もっと大きな単位で移動したい場合は、{ で段落の最初まで移動できます。} はパラグラフ全体の終末まで移動します。

画面の一番上の行に移動するには、H を使います。M は画面の真ん中まで移動し、L は一番下の行に移動します。gg はファイルの先頭まで飛び、G はファイルの一番最後まで行きます。Ctrl+D はページごとにスクロールします。

コマンドの繰り返し

コマンドの前に数字を付けると、その回数分コマンドが繰り返し実行されます (ただし s コマンドなど例外はあります) 例えば、3i → “Help! ” → Esc と入力すると “Help! Help! Help!“ と書かれます。2} なら2段落だけ前に進みます。これは次のコマンドで役に立ちます。

削除

x コマンドはカーソル上の文字を削除します。X はカーソルの前の文字を消します。先の繰り返しと組み合わせると便利です。6x は6文字分削除します。. (ドット) を押すと直前の動作が繰り返されます。例えば、何箇所に "foobar" という単語を書いていたとして、あれやこれやと考えた末、“foo” だけにしたくなったとします。その際は、"b" のところまでカーソルを移動して、3x と入力して、次の "foobar" に移って . (ドット) を押せば "bar" を簡単に削除できます。

d は Vim に何かを削除したいことを伝えます。d を押した後、Vim に削除したいものを指定してください。移動コマンドを使うことで指定することができます。dW は次の単語を削除します。d^ は行の先頭まで削除を行います。削除コマンドの前に数字を付けることもできます: 3dW は次の3つの単語を削除します。D (大文字) は行末まで削除するショートカットです (つまり d$) dd と入力すると一行まるまる削除されます。

単語を削除して置き換えたいときは、単語の上にカーソルを移動して cw コマンドを実行してください。単語を削除してから挿入モードに移行します。一文字だけ置換するときは r を使います。

アンドゥとリドゥ

Vim にはクリップボードが内蔵されています (バッファとも呼ばれます) 操作は u で元に戻し Ctrl+r でやり直すことができます。

ビジュアルモード

v を押すことでビジュアルモードに入ることができます。ビジュアルモードではあちこち移動して文章を選択し、選択したら、y を押して文章をバッファにヤンク (コピー) したり、c でカットすることが可能です。カーソルの後ろには p でペーストし、P はカーソルの前にペーストします。V は行単位で選択するビジュアルラインモードです。Ctrl+v は矩形選択を行います。

ノート: 何かを削除した時はいつでも、その何かはバッファの中に保存され、貼り付けることが可能です。

検索と置換

ファイル内の単語または文字を検索するには、/ を使って検索したい文字列を入力してエンターを押します。次の検索結果を見るには n を、前の結果に戻るには N を押して下さい。

検索と置換をしたいときは代わりに :s/ コマンドを使います。構文は: [range]s///[arguments]。例:

Command         Outcome
:s/xxx/yyy/     Replace xxx with yyy at the first occurrence
:s/xxx/yyy/g    Replace xxx with yyy at every occurrence in the current line
:s/xxx/yyy/gc   Replace xxx with yyy global with confirm
:%s/xxx/yyy/g   Replace xxx with yyy global in the whole file
:#,#s/xxx/yyy/g Replace xxx with yyy line number range

グローバル :g/ コマンドを使えばパターン検索をしてマッチした部分でコマンドを実行することができます。構文は: [range]:g//[cmd]

Command  Outcome
:g/^#/d  Delete all lines that begins with #
:g/^$/d  Delete all lines that are empty

保存と終了

保存や終了したいときは、Ex モードを使う必要があります。Ex モードのコマンドには : を前に付けます。ファイルを保存するには :w を使い、名前を付けてファイルを保存するには :w filename を使います。終了は :q です。変更を保存しないときには :q! を使って下さい。保存して終了は :x です。

その他のコマンド

  1. s を押すとカーソルの文字が消され、挿入モードに変わります。S は行全体を消去して、挿入モードに移行します。
  2. o は行の下に新しい行を追加して挿入モードに変わります、O 行の上に新しい行を追加して挿入モードに移行します。
  3. yy は行全体をヤンクします。
  4. cc はカーソルがある行を削除して挿入モードに入ります。
  5. * は単語をハイライトして、n はその単語を検索します。

設定

Vim のユーザー別の設定ファイルはホームディレクトリに配置されます: ~/.vimrc。カレントユーザーの Vim ファイルは ~/.vim/ の中に配置されます。グローバルな設定ファイルは /etc/vimrc にあります。グローバルな Vim ファイルは /usr/share/vim/ の中にあります。

gVim の場合、ユーザー固有の設定ファイルは ~/.gvimrc にあり、グローバル設定ファイルは /etc/gvimrc にあります。

ノート:
  • シンタックスハイライトなどの一般的な機能は defaults.vim で有効になっており、~/.vimrc が存在しない場合にロードされます。let skip_defaults_vim=1/etc/vimrc に追加することで defaults.vim のロードを完全に無効化できます [1]
  • gVim は Vim と gVim の設定ファイルの両方をロードしますが、Vim は Vim の設定ファイルのみをロードします。
set wrapscan

クリップボード

:yank:paste などの Vim コマンドは名前のないレジスタを使用しますが、デフォルトでは "* レジスタがこれにあたります。+clipboard 機能が有効になっている場合、"* レジスタは X の PRIMARY バッファになります。

デフォルトのレジスタを変更するには :set clipboard=unnamedplus"+ レジスタを使うことができます。"+ レジスタは X の CLIPBOARD バッファに相当します。 clipboard オプションはカンマ区切りの値に設定できることに注意してください。:set Clipboard=unnamedplus,unnamed の場合、ヤンク操作では、ヤンクされたテキストが "+ レジスタに加えて "* レジスタにもコピーされます。(ただし、削除、変更、および配置の操作は、依然として "+ レジスタに対してのみ実行されます)

詳細については、:help 'clipboard'を参照してください。clipboard 機能に設定できる値は他にもあります。:help Clipboard-unnamed を使用すると、この機能に設定できる最初の有効な値のヘルプ トピックに移動し、続いて他のすべての有効な値のヘルプに移動できます。

ヒント:
  • コピー&ペースト操作のためのカスタムショートカットを作成できます。Ctrl+cCtrl+v、および Ctrl+x のバインディングについては、[2] を参照してください。
  • X クリップボードは vim が終了するとフラッシュされます。vim の選択を X クリップボード内で永続的にするには、クリップボードマネージャ が必要です。あるいは、 autocmd VimLeave * call system("echo -n $'" . escape(getreg(), "'") . "' | xsel --input --clipboard").vimrc に追加します。(xsel パッケージが必要です)

シンタックスハイライト

シンタックスハイライトを有効にするには (Vim は膨大な数のプログラミング言語をサポートしています):

:filetype plugin on
:syntax on

インデント

特定のファイルタイプのインデントファイルをロードするには:

:filetype indent on

折返し表示

wrap オプションはデフォルトでオンになっており、ウィンドウの幅より長い行を折り返し、残りの行を次の行に表示するように Vim に指示します。wrap オプションはテキストの表示方法のみに影響し、テキスト自体は変更されません。

折り返しは通常、単語の途中であっても、ウィンドウに収まる最後の文字の後に行われます。よりインテリジェントな折り返しは linebreak オプションで制御できます。set linebreak で有効にすると、breakat 文字列オプションにリストされた文字の後に折り返しが発生します。

折り返された行は通常、インデントに関係なく次の行の先頭に表示されます。breakindent オプションは、長い行を折り返すときにインデントを考慮し、折り返された行が前に表示されていた行と同じインデントを保つように Vim に指示します。breakindent の動作は breakindentopt オプションで微調整することができ、例えば Python ファイルでは折り返す行をさらに 4 スペース右にずらすことができます (詳細は:help breakindentopt を参照してください):

autocmd FileType python set breakindentopt=shift:4

マウスを使う

Vim にはマウスを利用できるようにする機能がありますが、特定のターミナルでしか機能しません (Linux なら xtermgpm による Linux コンソール、あるいは PuTTY、詳しくはコンソールマウスサポート を参照)

この機能を有効にするには次の行を ~/.vimrc に追加してください:

set mouse=a

~/.vimrc が存在しない場合 mouse=a オプションを defaults.vim に設定することで読み込まれます。

ノート: ターミナルでマウスを有効にすると、X サーバーにアクセスできる場合、コピー&ペーストは "* レジスタを使うようになります。Shift キーを押すことで xterm によるマウスボタンの処理を利用できます。clipboard オプションも参照してください。

矢印キーによる行移動

デフォルトでは、行頭で を押したり、行末で を押しても、カーソルは前の行や次の行に移動しません。

~/.vimrc ファイルに set whichwrap=b,s,<,>,[,] を追加することでこのデフォルトの挙動を変更することができます。

ファイルのマージ

Vim には差分エディタが入っています。2つ (もしくはそれ以上) のファイルの差分をマージするのを助けるプログラムです。vimdiff は横にマルチペイン表示を行って差分を色でハイライトします、それぞれのペインには確認・編集するファイルが開かれます。Vim には複数のモードが存在しますが、重要なのは文章を編集する挿入モードと、ウィンドウや行をわたってカーソルを移動するコマンドモードの2つです。vimdiff file1 file2 を実行して起動します。以下はいくつかのコマンドの例です。

アクション ショートカット
次の差分 ]c
前の差分 [c
カーソルが (ハイライトされた) 差分の上にあるとき、もうひとつのウィンドウから現在のウィンドウに差分をコピー do
現在のウィンドウからもうひとつのウィンドウへ差分をコピー dp
折り畳まれた文章を開く zo
折り畳まれた文章を閉じる zc
ファイルの差分を再スキャン :diffupdate

ヒントとテクニック

作業を完遂するための特定のユーザーのトリック。

行番号

  • :set number で行番号を表示。
  • :set relativenumber で相対的な行番号を表示。
  • :<line number> でその行番号にジャンプ。

ジャンプはジャンプリストに記録されます。詳しくは :h jump-motions を参照。

スペルチェック

set spell

この設定を使うと、Vim はスペルが間違っている単語をハイライトします。ミススペルの単語にカーソルを載せて z= を入力すればスペルのサジェストが表示されます。

デフォルトでは英語の辞書しかインストールされていません、他の辞書は公式リポジトリからインストールできます。利用可能な言語のリストを表示するには:

# pacman -Ss vim-spell

言語辞書は Vim FTP archive からも入手できます。ダウンロードした辞書は ~/.vim/spell フォルダに配置して、次を入力して辞書をセットしてください: :setlocal spell spelllang=LL

ヒント:
  • LaTeX (または TeX) 文章のスペルチェックのみを有効にしたいときは、autocmd FileType tex setlocal spell spelllang=en_us~/.vimrc/etc/vimrc に追加して、Vim を再起動してください。英語以外の言語のスペルチェックを使う場合は、en_us を適当な言語で置き換えて下さい。
  • 2つの言語のスペルチェックを有効にするには (例えば英語とドイツ語)、set spelllang=en,de~/.vimrc/etc/vimrc に追加して、Vim を再起動してください。
  • FileType プラグインとファイルタイプを検出するカスタムルールを使うことで任意のファイルタイプ (例: *.txt) のスペルチェックを有効にすることができます。名前の最後が *.txt で終わるファイルのスペルチェックを有効にするには、/usr/share/vim/vimfiles/ftdetect/plaintext.vim ファイルを作成して、autocmd BufRead,BufNewFile *.txt setfiletype plaintext という行をファイルの中に記述します。そうしたら、autocmd FileType plaintext setlocal spell spelllang=en_us~/.vimrc/etc/vimrc に追加して、Vim を再起動してください。もしくは、~/.vimrc または /etc/vimrcautocmd BufRead,BufNewFile *.txt setlocal spell 行を追加してから Vim を再起動してください。スペルチェックを使用するファイルタイプ (*.txt) を指定するようにしてください。

実行状態の保存

通常、vim を終了すると、開いているファイル、コマンドラインの履歴、ヤンクしたテキストなど、必要のない情報はすべて破棄されます。この情報を保存するかどうかは、以下の方法で設定できます。

viminfo ファイル

また、viminfo ファイルには、コマンドライン履歴、検索文字列履歴、入力行履歴、レジスタの内容、ファイルのマーク、ファイル内の位置マーク、最後の検索/置換パターン (セッション内で n& による検索モードで使用)、バッファリスト、定義済みのあらゆるグローバル変数を保存するために使用されることがあります。viminfo モダリティを使用するには、インストールした vim のバージョンが +viminfo 機能付きでコンパイルされている必要があります。

viminfo ファイルに何を残すかを設定するには、例えば ~/.vimrc ファイルに以下のように記述します。

set viminfo='10,<100,:100,%,n~/.vim/.viminfo

各パラメータの前には識別子が付きます:

'q  : q, 記憶された編集済みファイルの数
<m  : m, 各レジスタに保存される行数
:p  : p, 記憶された履歴コマンド行の数
%   : バッファリストを保存して復元します
n...: viminfo ファイルへの完全修飾パス (これはリテラル "n" であることに注意してください。)

既存の viminfo ファイルが現在のセッション情報、例えばあなたが終了しようとしている現在のセッションのいくつかのバッファから更新されるときに、どのように変更されるかの詳細については、公式 viminfo documentation をご覧ください。

セッションファイル

セッションファイルは、任意の数の特定のセッションの状態を長期にわたって保存するために使用できます。各セッションやプロジェクトに1つの個別のセッションファイルを使用することができます。このモダリティを使用するには、インストールした vim のバージョンが +mksession 機能付きでコンパイルされている必要があります。

セッション内で :mksession[!] [my_session_name.vim] はカレントディレクトリの my_session_name.vim に vim-script を書き出します。ファイル名を not にするとデフォルトで Session.vim が使われます。オプションの ! は、同じ名前とパスの既存のセッションファイルを破棄します。

vim セッションは、ターミナルから vim を起動するときに再開できます:

$ vim -S [my_session_name.vim]

または、vim コマンドを実行して、既に開いているセッション バッファーで次のようにします。

:source my_session_name.vim

保存される内容やセッションファイルのオプションの詳細については、vim documentation で詳しく説明されています。コメント付きの例は、ここ にあります。

カーソル位置の保存

こちらを参照 Restore cursor to file position in previous editing session

vi コマンドを vim で置き換える

vivim にする エイリアス を作成してください。

もしくは、sudo vi と入力したときに vim が起動するようにしたい場合、vi-vim-symlinkAUR をインストールしてください。vi が削除され vim のシンボリックリンクで置き換えられます。

DOS/Windows のキャリッジリターン (CR)

行末に "^M" が表示されることがあります。これは MS-DOS や Windows で作成したテキストファイルを編集しようとしたときに起こります。

解決方法: 次のコマンドで "^M" を全て置換:

:%s/^M//g

注意、"^" は制御文字なので、Ctrl+Q を押して正しい "^" を取得してください。

もしくは、公式リポジトリから dos2unix パッケージをインストールして、dos2unix <file name here> を実行してください。

ノート: fileformat の設定を変えるという方法もあります。set ff=unix で DOS/Windows の改行コードが使われているファイルを Unix の改行コードに変換できます。逆をしたい場合、set ff=dos で Unix の改行コードが DOS/Windows の改行コードに変換されます。

gVim ウィンドウの底部の空きスペース

ウィンドウサイズのヒントを無視するように設定されたウィンドウマネージャを使っている場合、gVim は空の領域を GTK テーマの背景色で塗りつぶします。

解決方法はウィンドウ下部の gVim が確保するスペースを調整することです。ゼロに設定した場合、下の横スクロールバーが見えなくなってしまうことがあるので注意してください。次の行を ~/.vimrc に記述します:

set guiheadroom=0

Vim をページャとして使う

スクリプトを使える Vim は アプリケーション一覧/ユーティリティ#ターミナルページャ として使用することができ、配色などの様々な Vim の機能を得ることができます。

Vim には /usr/share/vim/vim82/macros/less.sh スクリプトが付属しており、その エイリアス を作成することで利用できます。このスクリプトは less(1) § OPTIONS で述べられているコマンドラインフラグをサポートしていないことに注意してください。

代わりに、vimpager という Vim スクリプトもあります。Vim スクリプトもあります。デフォルトのページャーを変更するには、環境変数 PAGERexport してください。全てのコマンドラインフラグに対応しているわけではないことに注意してください。対応するフラグの一覧は、こちらを参照してください。 available on GitHub

検索結果の強調表示

検索の入力中に検索で一致する最初の文字列を強調表示するには、~/.vimrc に次の行を追加します。

set incsearch

検索の入力中に検索で一致するすべての文字列を強調表示するには、検索が実行された後、~/.vimrc に次の行を追加します。

set hlsearch
ノート:
  • hlsearch を設定すると、さらに検索が行われるまで、すべての一致が強調表示されたままになります。この動作は望ましくない場合があるため、次の検索まで一時的に強調表示を無効にするには、:nohlsearch を実行します。このコマンドを頻繁に実行する場合は、コマンドをキーにバインドすることを検討してください。
  • この動作は、sg などの正規表現を含む他のコマンドで正規表現を照合するときにも表示されます。

XDG Base Directory 仕様の回避策

7.3.1178 以降、~/.vimrc が見つからない場合、vim は ~/.vim/vimrc を検索します。

"$XDG_CONFIG_HOME"/vim/vimrc
set runtimepath^=$XDG_CONFIG_HOME/vim
set runtimepath+=$XDG_DATA_HOME/vim
set runtimepath+=$XDG_CONFIG_HOME/vim/after

set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim
set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after

let g:netrw_home = $XDG_DATA_HOME."/vim"
call mkdir($XDG_DATA_HOME."/vim/spell", 'p')

set backupdir=$XDG_STATE_HOME/vim/backup | call mkdir(&backupdir, 'p')
set directory=$XDG_STATE_HOME/vim/swap   | call mkdir(&directory, 'p')
set undodir=$XDG_STATE_HOME/vim/undo     | call mkdir(&undodir,   'p')
set viewdir=$XDG_STATE_HOME/vim/view     | call mkdir(&viewdir,   'p')

if !has('nvim') | set viminfofile=$XDG_STATE_HOME/vim/viminfo | endif
~/.profile
export GVIMINIT='let $MYGVIMRC="$XDG_CONFIG_HOME/vim/gvimrc" | source $MYGVIMRC'
export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC'

[G]VIMINIT 環境変数は、Neovim にも影響します。Vim と Neovim に個別の設定が必要な場合は、次の方が適切な選択になります:

export GVIMINIT='let $MYGVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/gvimrc" : "$XDG_CONFIG_HOME/nvim/init.gvim" | so $MYGVIMRC'
export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.vim" | so $MYVIMRC'

プラグイン

vim にプラグインを追加することで、Vim の機能が拡張され、生産性が向上します。プラグインは、Vim の UI の変更、新しいコマンドの追加、コード補完サポートの有効化、他のプログラムやユーティリティと Vim との統合、追加言語のサポートの追加などを行うことができます。

ヒント: 人気のあるプラグインのリストについては、Vim Awesome を参照してください。

インストール

内蔵のパッケージマネージャを使う

Vim 8 では、サードパーティのプラグインをネイティブにロードできる機能が追加されました。この機能は、サードパーティのパッケージを ~/.vim/pack フォルダーに保存することで使用できます。このフォルダーの構造は、通常プラグインごとに1つのディレクトリを持つ一般的なプラグインマネージャーの構造とは少し異なります。以下は一般的なインストール手順とディレクトリ構造です (例として Tim Pope の vim-surround プラグイン を使用):

$ mkdir -p ~/.vim/pack/tpope/start

~/.vim/pack/tpope はパッケージディレクトリであり、Vim documentation では1つ以上のプラグインを含むディレクトリとして大まかに定義されていることに注意することが重要です。ただし、プラグインリポジトリはこのディレクトリにダウンロードしないでください。パッケージディレクトリの名前も任意です。すべてのプラグインを1つのパッケージディレクトリに保存するか、この例のように作成者の GitHub 名 tpope を使用するかを選択できます。

パッケージディレクトリには次のサブフォルダーを含めることができます:

  • start - このサブフォルダーのプラグインは、Vim の起動時に自動的にロードされます。ここは最も頻繁に使用される場所です。
  • opt - このサブフォルダーのプラグインは、Vim 内で :packadd コマンドを発行することでオンデマンドでロードできます。

次に、start フォルダーに移動し、プラグインリポジトリをチェックアウトします:

$ cd ~/.vim/pack/tpope/start
$ git clone https://tpope.io/vim/surround.git

これにより、追加のサブフォルダー ~/.vim/pack/tpope/start/surround が作成され、そこにプラグインファイルが配置されます。

次に、プラグインにヘルプファイルが含まれている場合は、ヘルプインデックスを更新します:

$ vim -u NONE -c "helptags surround/doc" -c q

これで Vim の起動時にプラグインが自動的にロードされるようになります。プラグイン固有のオプションを除き、~/.vimrc を変更する必要はありません。

プラグインマネージャを使う

プラグインマネージャーは、Vim プラグインをインストール、管理、更新するプラグインです。これは、Arch Linux 以外のプラットフォームでも Vim を使用していて、プラグインを更新する一貫した方法が必要な場合に役立ちます。

  • Vim-plug はミニマルな Vim プラグインマネージャです。必要に応じてプラグインをロードしたり並列アップデートなどの多数の機能を備えています。vim-plugAUR または vim-plug-gitAUR として利用できます。
  • Vundle vundleAUR または vundle-gitAUR として利用できます。
  • pathogen.vim Vim のランタイムパスを管理するためのシンプルなプラグインで、vim-pathogenAUR または vim-pathogen-gitAUR として利用できます。
  • Dein.vim NeoBundle に代わるプラグインマネージャーで、vim-deinAUR または vim-dein-gitAUR として入手できます。

Arch のリポジトリを使う

vim-plugins グループには様々なプラグインが入っています。pacman -Sg vim-plugins コマンドを使うことで pacman でインストールできるパッケージのリストを確認できます。

注目のプラグイン

cscope

Cscope はプロジェクトを閲覧するためのツールです。単語/シンボル/関数まで移動して (ショートカットキーを使って) cscope を呼び出すことで次のことがわかります: 関数を呼び出している関数や、関数の定義など。コードベースを検索するには複数の手順が必要です。

cscope パッケージを インストール してください。

cscope のデフォルトファイルを vim が自動的に読み取るところへコピーします:

mkdir -p ~/.vim/plugin
wget -P ~/.vim/plugin http://cscope.sourceforge.net/cscope_maps.vim 
ノート: Vim 7.x で cscope ショートカットを有効にするには、おそらく ~/.vim/plugin/cscope_maps.vim でこれらの行のコメントを解除する必要があります。:
set timeoutlen=4000
set ttimeout

cscope にインデックス化して欲しいファイルを記述したファイルを作成 (Cscope は多数の言語を扱えますがこの例では .c, .cpp, .h ファイルを find しています):

$ cd /path/to/project/dir
$ find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files

cscope が読み取るデータベースファイルを作成します:

cscope -bq
ノート: この場所からプロジェクトファイルを閲覧するか、$CSCOPE_DB 変数を設定して cscope.out ファイルの場所を指定してください。

デフォルトのキーボードショートカット:

 Ctrl-\ and
      c: Find functions calling this function
      d: Find functions called by this function
      e: Find this egrep pattern
      f: Find this file
      g: Find this definition
      i: Find files #including this file
      s: Find this C symbol
      t: Find assignments to

ショートカットは自由に変更することができます。

#Maps ctrl-c to find functions calling the function 
nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>

Taglist

Taglist はソースコードファイルの構造の概観を提供し、様々なプログラミング言語で書かれたソースコードファイルを効率的に閲覧できるようにします。

vim-taglistAUR パッケージをインストールしてください。

~/.vimrc に記述する有用なオプション:

let Tlist_Compact_Format = 1
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Close_On_Select = 1
nnoremap <C-l> :TlistToggle<CR>

トラブルシューティング

gVim が遅い

Vim の GTK3GUI は GTK2 バージョンよりも遅い場合があります(FS#51366 を参照) gvim-gtk2AUR を回避策としてインストールしてみて下さい。

双方向サポート

Vim は依然として 完全な双方向サポートが不足 であり、これは端末によって異なります。

:rightleft を使用してテキストの位置を強制的に揃えます。以下を使用してキーバインドに割り当てることができます。

inoremap <C-X> <C-O>:silent if &rl <Bar> set rl! <Bar> else <Bar> set rl <Bar> endif<CR>

Vim には独自の文字整形機能があります。いくつかの レンダリングの問題 にもかかわらず、これは alacrittyst のような文字整形をサポートしていない端末でも機能します。整形は アラビア語プレゼンテーションフォーム-B (U+FE70–FEFF) に依存するため、フォントにこれらの文字のサポートが含まれていることを確認してください。これらの文字を完全にサポートする既知の等幅フォントがないため、追加のフォールバックフォント (例: ttf-dejavu へのフォールバックを備えた vazir-code-fontsAUR) が必要です。端末フォントの設定例については、St#アラビア語シェーピングのサポート を参照してください。

ただし、端末が gnome-terminal やその他の libvte ベースの端末のような文字整形をサポートしている場合、Vim と端末の文字整形が競合する可能性があります。現在の回避策は、:set arabicshape! による整形を無効にすることですが、これにより、:set rightleft のときにテキストが反転してしまうことに注意してください。詳細については、:set arabic を参照してください。

参照

公式

チュートリアル

動画

チートシート

ゲーム

設定

カラー