netrw — 組み込みファイルブラウザ

Neovimには netrw というファイルブラウザが標準で組み込まれています。プラグインなしでも基本的なファイル操作が可能です。追加インストール不要なので、まず最初に覚えておくべき機能です。

Neovim — netrw の起動
:Ex          " カレントディレクトリを開く(Explore の略)
:Vex         " 垂直分割で開く
:Sex         " 水平分割で開く
:Tex         " 新しいタブで開く

netrw の基本操作

キー動作
Enterファイルを開く / ディレクトリに移動
-親ディレクトリへ移動
d新しいディレクトリを作成
%新しいファイルを作成して開く
Rファイル / ディレクトリの名前変更
Dファイル / ディレクトリを削除
i表示スタイルの切り替え(リスト / ツリー / 詳細)
sソート方法の切り替え
gh隠しファイルの表示 / 非表示を切り替え
ℹ️
netrw の制限 netrw は機能はありますが、UIや操作性がやや古くて使いづらい面があります。本格的に使うなら、次のセクションで紹介する Neo-tree.nvim などのプラグインの導入をおすすめします。

Neo-tree.nvim — ファイルツリープラグイン

Neo-tree.nvim は、VSCodeのエクスプローラーに相当するファイルツリーをNeovimに追加するプラグインです。ディレクトリ構造が一目でわかり、マウスを使わずキーボードだけで快適にファイル操作ができます。

Neo-tree のファイルツリーと editor の分割表示
Luaplugins/neo-tree.lua
-- Lazy.nvim での設定例
{
  "nvim-neo-tree/neo-tree.nvim",
  branch = "v3.x",
  dependencies = {
    "nvim-lua/plenary.nvim",
    "nvim-tree/nvim-web-devicons", -- ファイルアイコン(任意)
    "MunifTanjim/nui.nvim",
  },
  keys = {
    { "<leader>e", "<cmd>Neotree toggle<cr>", desc = "Explorer Toggle" },
    { "<leader>o", "<cmd>Neotree focus<cr>",  desc = "Explorer Focus" },
  },
  opts = {
    window = {
      position = "left",
      width = 35,
    },
    filesystem = {
      filtered_items = {
        hide_dotfiles = false, -- .gitignore 等を表示
        hide_gitignored = false,
      },
      follow_current_file = {
        enabled = true, -- 編集中のファイルを自動でフォーカス
      },
    },
  },
}

Neo-tree の基本操作

キー動作
a新しいファイルを作成(末尾に / をつけるとディレクトリ)
dファイル / ディレクトリを削除
r名前の変更
cコピー
m移動
Enter / oファイルを開く
s垂直分割で開く
S水平分割で開く
t新しいタブで開く
H隠しファイルの表示 / 非表示
?ヘルプ(キー一覧)を表示

Telescope.nvim — ファジーファインダー

Telescope.nvim はNeovim最人気のプラグインのひとつで、ファイル・バッファ・コマンド・ヘルプページなどを曖昧検索(ファジーファインド)で瞬時に探し出せます。キーを数回押すだけで目的のファイルに到達できます。

Telescope.nvimのファジーファインダーUI
Luaplugins/telescope.lua
{
  "nvim-telescope/telescope.nvim",
  tag = "0.1.x",
  dependencies = {
    "nvim-lua/plenary.nvim",
    -- fzf ネイティブ拡張(高速化)
    { "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
  },
  keys = {
    { "<leader>ff", "<cmd>Telescope find_files<cr>",  desc = "Find Files" },
    { "<leader>fg", "<cmd>Telescope live_grep<cr>",   desc = "Live Grep" },
    { "<leader>fb", "<cmd>Telescope buffers<cr>",     desc = "Buffers" },
    { "<leader>fh", "<cmd>Telescope help_tags<cr>",  desc = "Help Tags" },
    { "<leader>fr", "<cmd>Telescope oldfiles<cr>",   desc = "Recent Files" },
  },
  config = function()
    require("telescope").setup({
      defaults = {
        mappings = {
          i = {
            ["<C-k>"] = "move_selection_previous",
            ["<C-j>"] = "move_selection_next",
          },
        },
      },
    })
    require("telescope").load_extension("fzf")
  end,
}

Telescope の主なコマンド

コマンド説明
:Telescope find_filesファイル名でファジー検索
:Telescope live_grepファイル内容をリアルタイム検索(ripgrep使用)
:Telescope buffers開いているバッファを一覧から選択
:Telescope oldfiles最近開いたファイルの履歴
:Telescope git_filesGitリポジトリ内のファイルを検索
:Telescope keymaps設定済みキーマップを検索
:Telescope commands利用可能なコマンドを検索
💡
Telescope 内のキー操作 Telescope のポップアップが開いたら、Ctrl-j / Ctrl-k で候補を移動、Enter で選択、Esc で閉じます。Ctrl-v で垂直分割、Ctrl-x で水平分割して開くこともできます。

バッファ管理

Neovimでは「ファイルを開く」ことは「バッファに読み込む」ことです。複数のファイルを同時に開いている場合、それぞれがバッファとして管理されます。バッファを理解することは、Neovimを快適に使う上で非常に重要です。

バッファ管理コマンド
:ls    " 開いているバッファを一覧表示
:bn    " 次のバッファへ移動 (buffer next)
:bp    " 前のバッファへ移動 (buffer previous)
:b 3   " バッファ番号 3 へジャンプ
:b filename  " ファイル名でバッファを指定
:bd    " 現在のバッファを閉じる (buffer delete)
:bd!   " 変更を破棄して強制的に閉じる
:bufdo %bd  " すべてのバッファを閉じる
📌
バッファとウィンドウの違い 「バッファ」はメモリ上のファイルデータ、「ウィンドウ」はそのバッファを表示する領域です。1つのバッファを複数のウィンドウで同時に表示することもできます。バッファを閉じてもウィンドウは残り、ウィンドウを閉じてもバッファはメモリに残ります。

ウィンドウ分割

Neovimは1つの画面を複数のウィンドウに分割できます。左右にコードとドキュメントを並べたり、上下に本文とターミナルを配置したりと、作業スタイルに合わせた配置が可能です。

コマンド / キー動作
:sp水平分割(現在のファイルを上下に分ける)
:vsp垂直分割(現在のファイルを左右に分ける)
:sp filename水平分割で別ファイルを開く
:vsp filename垂直分割で別ファイルを開く
Ctrl-w h左のウィンドウへ移動
Ctrl-w j下のウィンドウへ移動
Ctrl-w k上のウィンドウへ移動
Ctrl-w l右のウィンドウへ移動
Ctrl-w =全ウィンドウを同じサイズに均等化
Ctrl-w >ウィンドウを右に広げる
Ctrl-w <ウィンドウを左に縮める
Ctrl-w +ウィンドウを下に広げる
Ctrl-w -ウィンドウを上に縮める
Ctrl-w o現在のウィンドウだけ残して他を閉じる
Ctrl-w q現在のウィンドウを閉じる
💡
ウィンドウ移動のショートカット設定 Ctrl-w h/j/k/l は頻繁に使うので、Ctrl-h/j/k/l に短縮マップするのが一般的です。
vim.keymap.set('n', '<C-h>', '<C-w>h') のように init.lua に追加しましょう。

タブページ

Neovimのタブページは、ウィンドウのレイアウト全体を保存する仕組みです。プロジェクトAのウィンドウ配置とプロジェクトBのウィンドウ配置を切り替えるといった使い方が典型的です。

コマンド / キー動作
:tabnew新しいタブを開く
:tabnew filename新しいタブでファイルを開く
:tabclose現在のタブを閉じる
:tabnext / :tabprev次 / 前のタブへ移動
gt次のタブへ移動
gT前のタブへ移動
3gtタブ番号 3 へ移動
:tabmove 0現在のタブを先頭に移動

マークを使ったジャンプ

マーク機能を使うと、ファイル内の特定の位置に「しおり」をつけて、後からワンキーで戻ることができます。大きなファイルを行き来するときや、複数ファイル間を頻繁に移動するときに非常に便利です。

キー動作
maカーソル位置にマーク「a」を設定(小文字 = ファイルローカル)
mAカーソル位置にマーク「A」を設定(大文字 = グローバル、ファイルをまたいで移動可能)
`aマーク「a」の正確な位置(行 + 列)へジャンプ
'aマーク「a」の行の先頭へジャンプ
``直前のジャンプ位置へ戻る
''直前にいた行の先頭へ戻る
:marks設定されているマークの一覧を表示
:delmarks aマーク「a」を削除
ℹ️
特殊マーク `.(バッククォート + ドット) で最後に変更した位置へジャンプ、`0 で前回Neovimを終了したときのファイルの位置に戻ることができます。これらは自動設定されるため、意識せずに活用できます。

Harpoon — 高速ファイル移動

Harpoon(ThePrimeagen作)は、よく使うファイルを「ピン留め」して、ワンキーで切り替えるプラグインです。プロジェクト内で頻繁に行き来するファイルが決まっている場合、Telescope よりもさらに素早く移動できます。

Luaplugins/harpoon.lua
{
  "ThePrimeagen/harpoon",
  branch = "harpoon2",
  dependencies = { "nvim-lua/plenary.nvim" },
  config = function()
    local harpoon = require("harpoon")
    harpoon:setup()

    local map = vim.keymap.set
    -- ファイルをリストに追加
    map("n", "<leader>a", function() harpoon:list():add() end)
    -- ファイルリストを表示
    map("n", "<C-e>", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end)
    -- 1〜4番のファイルへ直接ジャンプ
    map("n", "<C-1>", function() harpoon:list():select(1) end)
    map("n", "<C-2>", function() harpoon:list():select(2) end)
    map("n", "<C-3>", function() harpoon:list():select(3) end)
    map("n", "<C-4>", function() harpoon:list():select(4) end)
  end,
}

Harpoon の使い方はシンプルです。よく使うファイルを開いて <leader>a でリストに追加し、Ctrl-1Ctrl-4 で瞬時に切り替えます。Telescope でファイルを探す手間すら不要で、登録済みのファイルには1キーで移動できます。

ファイル管理 キーマップ一覧

本章で紹介したキーマップをまとめます。

ファイルツリー / 検索

キー(推奨設定)動作
<leader>eNeo-tree をトグル
<leader>ffTelescope: ファイル検索
<leader>fgTelescope: ファイル内容をgrep
<leader>fbTelescope: バッファ一覧
<leader>frTelescope: 最近使ったファイル
<leader>aHarpoon: 現在のファイルをピン留め
<C-e>Harpoon: リストを表示

バッファ操作

キー動作
:lsバッファ一覧を表示
:bn / :bp次 / 前のバッファへ移動
:bdバッファを閉じる

ウィンドウ操作

キー動作
:vsp / :sp垂直 / 水平分割
Ctrl-w h/j/k/lウィンドウ間を移動
Ctrl-w =ウィンドウサイズを均等化
Ctrl-w o現在のウィンドウだけ残す