この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:T
更新日時:2026-06-11 07:12:00

タイトル: 行数を表示する方法
SEOタイトル: vi / Vim 行数表示完全ガイド (:set number / 相対行 / 永続化)

この記事の要点
  • vi / Vim で行番号表示: :set number または :set nu
  • 非表示: :set nonumber / :set nonu
  • 相対行番号: :set relativenumber (:set rnu) → 移動コマンド 5j 等が直感的に
  • 両方併用 (Hybrid): :set nu rnu → 現在行は絶対、他は相対
  • 永続化: ~/.vimrcset number を追記すれば毎回有効

結論: 行番号を出すコマンド

" Normal モードで Esc → コロン入力
:set number
" または短縮形
:set nu

" 消す
:set nonumber
:set nonu

" トグル
:set number!

左端にカーソル行までを含む絶対行番号が表示されます。

相対行番号 (relativenumber)

Vim 7.3 で追加された便利機能。現在行からの距離を表示し、5j (5 行下) や 10dd (10 行削除) のような移動・編集コマンドが直感的になります。

" 相対行番号 ON
:set relativenumber
:set rnu       " 短縮形

" 相対行番号 OFF
:set norelativenumber
:set nornu

" トグル
:set rnu!

表示イメージ:

  3  function add(a, b) {
  2    return a + b;
  1  }
  0  function sub(a, b) {   ← 現在行
  1    return a - b;
  2  }
  3
  4  function mul(a, b) {

「3 つ下に行きたい」→ 3j で即座に動けます。

Hybrid モード (絶対行 + 相対行)

Vim 7.4 以降では 両方同時に有効化できます。現在行は絶対行番号、他は相対行番号という最強モード:

:set number
:set relativenumber

" まとめて
:set nu rnu

表示イメージ:

  3  function add(a, b) {
  2    return a + b;
  1  }
 42  function sub(a, b) {   ← 現在行は絶対 (42)
  1    return a - b;
  2  }
  3
  4  function mul(a, b) {

これで「現在何行目か」も「あと何行下か」も同時に分かります。Neovim ディストリの LazyVim / AstroNvim はこれがデフォルトです。

設定の永続化 (~/.vimrc)

毎回 :set number を打つのは面倒。~/.vimrc に書けば起動時に自動適用されます:

# ~/.vimrc を編集
vi ~/.vimrc
" ~/.vimrc
set number
set relativenumber
" カーソル位置を強調
set cursorline
" ステータスラインに行・列番号
set ruler
" 検索ハイライト
set hlsearch
set incsearch

保存して再起動すれば次回から有効です。

Neovim の場合

Neovim では ~/.config/nvim/init.vim または ~/.config/nvim/init.lua に書きます:

" ~/.config/nvim/init.vim (Vim script 派)
set number
set relativenumber
-- ~/.config/nvim/init.lua (Lua 派、推奨)
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true

関連: ステータス情報

" ステータスラインに行・列・% を表示
:set ruler

" 常時ステータスライン表示
:set laststatus=2

" カーソル列のハイライト
:set cursorcolumn

" カーソル行のハイライト
:set cursorline

" 現在行の情報を即座に表示
Ctrl+g    " Normal モード
" → "filename.txt" 42 lines --50%-- col 12

特定行へのジャンプ

:42            " 42 行目へ
42G            " 同じく 42 行目へ (Normal モード)
gg             " 1 行目
G              " 最終行
50%            " ファイル中央 (50%)

" 検索でジャンプ
/pattern       " pattern にマッチする行へ

行内容のコピーと操作

yy             " 現在行をコピー (yank)
3yy            " 3 行コピー
:42y           " 42 行目をコピー
:42,50y        " 42-50 行目をコピー
:%y+           " 全行をシステムクリップボードへ (要 +clipboard)

p              " ペースト
:42pu          " 42 行目の後にペースト

" 行コピーをシステムクリップボードへ (macOS / Linux GUI)
:set clipboard=unnamed     " macOS
:set clipboard=unnamedplus " Linux

行番号付きで表示・印刷

" 行番号付きで cat (vi 外)
cat -n file.txt

" 番号付きで表示
nl file.txt

" Vim で印刷時に行番号
:set printoptions=number:y
:hardcopy

nano / Emacs での同等操作

エディタ行番号 ON
Vim / vi:set number
Neovim:set number
nanoCtrl+C でカーソル位置表示 / nano -l file で起動
EmacsM-x linum-mode or M-x display-line-numbers-mode
VS Code標準で表示 / 設定 editor.lineNumbers

FAQ

Q: 行番号をコピーしたくない (画面選択時)
A: ターミナル選択コピーは行番号も入ります。:set mouse=a を入れて Vim 内選択 (Visual モード) を使うか、行番号を一時的に消す: :set nonu

Q: 行番号の幅が広くて見づらい
A: :set numberwidth=3 で幅指定。または相対行番号で 2 桁に抑える。

Q: :set nu を打ってもエラーになる
A: Normal モードで実行する必要があります。Esc を押してから :set nu。Insert モードのまま打つと文字列として入力されます。

Q: 古い vi (Vim でない真の vi) で行番号は?
A: 同じ :set number / :set nu で OK。古典 vi は機能が限られますが、行番号は標準サポート。