メインコンテンツまでスキップ

コマンド詳細

テーブル・コールアウト・画像・埋め込み・水平線に関する記載は、特記がない限りライブプレビューでの挙動です。ソースモードの挙動であるものは項目内に明記しています。

ソースモードでのテーブル対応は「Table-aware Source Mode editing」設定が OFF の場合は適用されません。 (デフォルトは ON です)

Cursor movement​

UP

このコマンドは物理カーソルキー ↑ と同等の挙動をすることを目的としています。一部の場面では物理カーソルキー ↑ よりも一層のテーブル対応・Markdown 対応を図っています。

この UP コマンドは「For everyone」画面で物理カーソルキー ↑ キーに割り当てることができますが、ここでの「物理カーソルキー ↑」はこのコマンドを割り当てていない、そのままの状態の ↑ キーを指します。

■ 物理カーソルキー ↑ と同等の動作

以下の場所からの移動では物理カーソルキー ↑ と同じ動作をします。

  • テキスト内: ひとつ上の表示行へ移動します。
  • 引用・コールアウト・画像・埋め込み・水平線の下: 下から上にブロックに入り、Markdown のソースを展開します。
    • 画像・埋め込み (![[...]]、![...](...)) の場合、その記法が行頭から始まっている場合に適用されます。
    • 水平線 (---、***、___) の場合、カーソルはその行の先頭に着地します。
    • Obsidian の macOS ショートカット Ctrl + P は物理カーソルキー ↑ と挙動が異なり、このブロックを通り抜けて、その上に移動していました。
  • テーブルの見出し行の 1 行目: テーブルから抜け出して上の行に移動します。
    • カーソル横位置を極力維持します。
    • Obsidian の macOS ショートカット Ctrl + P は物理カーソルキー ↑ と挙動が異なり、セル内の 2 文字目以降にいる場合はテーブルを抜け出さずセルの先頭に移動していました。セルの先頭にいる場合には物理カーソルキー ↑ と同様にテーブルを抜け出します。
    • テーブルがノート冒頭にある場合は、物理カーソルキー ↑ は、ノート先頭に空行を追加した上でその空行に着地しますが、このプラグインの UP は空行を追加せず、セル先頭に移動します。
  • テーブルのセル内テキストの 2 行目以降: 同じセル内の 1 行上に移動します。
    • カーソル横位置を極力維持します。

■ 物理カーソルキー ↑ と異なる動作

以下の点では物理カーソルキー ↑ と異なる挙動をします。より一層テーブル対応・Markdown 対応した箇所です。

  • テーブルのセル内テキストの 1 行目: ひとつ上のセルの最終行に移動します。
    • カーソル横位置は元の位置を極力維持します。
    • 物理カーソルキー ↑ も直上セルの最終行に移動する点は同じですが、カーソル横位置は常に左端に着地していました。
    • Obsidian の macOS ショートカット Ctrl + P は上のセルに移動せず、同じセルの先頭に移動していました。その後の挙動は不安定で、先頭に止まることもテーブルを脱出することもあります。
  • テーブルの下: 下から上にテーブルに入り、左下セルの一番下の表示行に移動します。
    • カーソル横位置は元の位置を極力維持します。
    • カーソル横位置が左下セル幅よりも右にある場合は左下セル最終行の末尾に着地します。
    • 物理カーソルキー ↑ も左下セルに侵入する点は同じですが、直前のカーソル位置によって着地行が最終行になったり 1 行目になったりと、安定しません。
DOWN

このコマンドは物理カーソルキー ↓ と同等の挙動をすることを目的としています。一部の場面では物理カーソルキー ↓ よりも一層のテーブル対応・Markdown 対応を図っています。

この DOWN コマンドは「For everyone」画面で物理カーソルキー ↓ キーに割り当てることができますが、ここでの「物理カーソルキー ↓」はこのコマンドを割り当てていない、そのままの状態の ↓ キーを指します。

■ 物理カーソルキー ↓ と同等の動作

以下の場所からの移動では物理カーソルキー ↓ と同じ動作をします。

  • テキスト内: ひとつ下の表示行へ移動します。
  • コールアウトの上: 上から下にブロックに入り、Markdown のソースを展開します。
    • 次の行がコールアウトのヘッダー行 (> [!type]...) である場合に適用されます。
  • 画像・埋め込み・水平線の上: 上から下にブロックに入り、Markdown のソースを展開します。
    • 画像・埋め込み (![[...]]、![...](...)) の場合、その記法が行頭から始まっている場合に適用されます。
    • 水平線 (---、***、___) の場合、カーソルはその行の先頭に着地します。
  • テーブルのセル内テキストの下から 2 行目以前: 同じセル内の 1 行下に移動します。
    • カーソル横位置を極力維持します。
  • テーブルの最終行: テーブルから抜け出して下の行に移動します。
    • カーソル横位置を極力維持します。
    • テーブルがノート末尾にある場合、下に行が追加されてそこに着地します。(物理カーソルキー ↓ と同じ挙動です)

■ 物理カーソルキー ↓ と異なる動作

以下の点では物理カーソルキー ↓ と異なる挙動をします。より一層テーブル対応・Markdown 対応した箇所です。

  • テーブルの上: 上から下にテーブルに入り、左上セルの表示行 1 行目に移動します。
    • カーソル横位置は元の位置を極力維持します。
    • カーソル横位置が左上セル幅よりも右にある場合は左上セル 1 行目の末尾に着地します。
    • 物理カーソルキー ↓ も左上セルに侵入する点は同じですが、カーソル横位置は常に左端に着地していました。
  • テーブルのセル内テキストの最終行: ひとつ下のセルの表示行 1 行目に移動します。
    • カーソル横位置は元の位置を極力維持します。
    • 物理カーソルキー ↓ も下のセルに移動する点は同じですが、常にセルの先頭に着地していました。
    • Obsidian の macOS ショートカット Ctrl + N は下のセルに移動せず、同じセルの末尾に移動していました。その後の挙動は不安定で、末尾に止まることもテーブルを脱出することもあります。
LEFT

このコマンドは物理カーソルキー ← と同等の挙動をすることを目的としています。一部の場面では物理カーソルキー ← よりも一層のテーブル対応を図っています。

■ 物理カーソルキー ← と同等の動作

以下の場所からの移動では物理カーソルキー ← と同じ動作をします。

  • テキスト内、またはセルの内容の途中: 1 文字左に移動します。
  • テーブル内のセル先頭:
    • 見出し行の左端セル先頭: テーブルの上に脱出します。
      • ただし、Cross-row navigation 設定が OFF の場合はセル先頭にとどまります。
      • テーブルがノート冒頭にある場合、物理カーソルキー ← はノート先頭に空行を追加した上でその空行に着地しますが、この LEFT コマンドは空行を追加せず、何も起こりません。(UP コマンドと同じ制約です)
    • それ以外の行の左端セル先頭: 上の行の右端セル末尾に移動します。
      • ただし、Cross-row navigation 設定が OFF の場合はセル先頭にとどまります。
    • 2 番目以降のセル先頭: 左隣のセルの末尾に移動します。

■ 物理カーソルキー ← と異なる動作

以下の条件 / 箇所では物理カーソルキー ← と異なる挙動をします。

  • テーブルの下の行の先頭: テーブルに入り、右下セルの末尾に移動します。
    • 物理カーソルキー ← は、左下セルの一番下の表示行の左端に着地していました。
  • Cross-row navigation 設定が OFF のとき、左端セル冒頭:
    • 前述の左端セル先頭の 2 項目 (見出し行・それ以外の行) は、行またぎ動作をしなくなります。(物理カーソルキー ← は常に行をまたぎます)
RIGHT

このコマンドは物理カーソルキー → と同等の挙動をすることを目的としています。一部の場面では物理カーソルキー → よりも一層のテーブル対応を図っています。

■ 物理カーソルキー → と同等の動作

以下の場所からの移動では物理カーソルキー → と同じ動作をします。

  • テキスト内、またはセルの内容の途中: 1 文字右に移動します。
  • テーブル内のセル末尾:
    • 右端以外のセル末尾: 右隣のセルの先頭に移動します。
    • 最終行以外の右端セル末尾: 下の行の左端セル先頭に移動します。
      • ただし、Cross-row navigation 設定が OFF の場合はセル末尾にとどまります。
    • 最終行の右端セル末尾: テーブルの下に脱出します。
      • ただし、Cross-row navigation 設定が OFF の場合はセル末尾にとどまります。
      • テーブルがノート末尾にある場合、下に行が追加されてそこに着地します。これは DOWN コマンドと同じ挙動で、LEFT コマンドのノート冒頭の制約とは異なります。
  • テーブルの上の行末: テーブルに入り、見出し行の左端セル先頭に移動します。

■ 物理カーソルキー → と異なる動作

以下の条件 / 箇所では物理カーソルキー → と異なる挙動をします。

  • Cross-row navigation 設定が OFF のとき、右端セル末尾:
    • 前述の右端セル末尾の 2 項目 (最終行・それ以外の行) は、行またぎ動作をしなくなります。(物理カーソルキー → は常に行をまたぎます)
HOME

このコマンドは物理キー Home (macOS の場合は fn + ←) と同等の挙動をすることを目的としています。一部の場面では物理キー Home よりも一層のテーブル対応・Markdown 対応を図っています。

この HOME コマンドは「For everyone」画面で物理キー Home キーに割り当てることができますが、ここでの「物理キー Home」はこのコマンドを割り当てていない、そのままの状態の Home キーを指します。

■ 物理キー Home と同等の動作

プレーンテキストおよびテーブルセル内の行において、行の先頭に向かって最大 3 段階で移動します。

  • ステップ 1: 現在の表示行の左端に移動します。(長いテキストが行が折り返して表示されていて、カーソルが最初の表示行にない場合)
  • ステップ 2: 行頭の Markdown 記法とテキスト本文の間に移動します。
    • インデント、リスト (- 、+ 、* )、チェックボックス (- [ ] )、番号付きリスト (1. 、1) )、番号付きチェックボックス (1. [ ] )、引用 (> ) はその手前 (本文の先頭) で止まります。多重引用やインデント付きの場合も同様です。
    • 引用の中にリスト・番号付きリスト・チェックボックスが続く場合 (> - など) は、ライブプレビューではリストやチェックボックスはレンダリングされませんが、Smart home の判定では引用とあわせて行頭 Markdown と判定し、リスト等の記法と本文の間に移動します。(これは物理キー Home と同じ挙動です)
  • ステップ 3: 行の先頭 (論理行の先頭) に移動します。

プレーンテキストの論理行頭で HOME を実行してもそれ以上は移動しません。

■ 物理キー Home と異なる動作

プレーンテキストおよびテーブルセル内での 3 段階動作に関して、物理キー Home と異なる点は次のとおりです。物理キー Home と同等の動作が基本ですが、細部の挙動は設定で調整可能になっています。(→ Smart home / Visual line movement 設定)

  • ステップ 1 での差異: Visual line movement を OFF にした場合は最初の表示行左端への移動動作をスキップします。
  • ステップ 2 での差異: Smart home (standard) が OFF の場合は行頭の Markdown 考慮をスキップします。
  • ステップ 2 での差異: Smart home (standard) が ON かつ Smart home (advanced) が ON の場合 (これがデフォルトです) は、考慮する行頭 Markdown の種類が増えます。前述のものに加えて見出し (# )、脚注 ([^1]: )、コールアウト ([!type] ) も考慮対象となります。
    • リスト & 見出し (- # ) および引用 & 見出し (> # 、これは見出しとしてはレンダリングはされません) でも見出しと本文テキストの間で止まります。

テーブルのセル先頭 (複数の行がある場合は 1 行目の先頭) では物理キー Home と異なる挙動をします。

  • 見出し行の左端セル先頭: テーブルから抜け出して上の行に移動します。
    • Cross-row navigation (デフォルト ON) の場合の挙動です。
    • Cross-row navigation が OFF の場合は、物理キー Home と同じくテーブルから抜け出さずに左端セル先頭にとどまります。
    • テーブルがノート冒頭にある場合は Cross-row navigation の設定によらずテーブルから抜け出さずに左端セル先頭にとどまります。
  • 2 番目以降のセル先頭: 同じ行の左隣のセルの末尾に移動します。
  • 2 行目以降の左端セル先頭: ひとつ上の行の右端セル末尾に移動します。
    • Cross-row navigation (デフォルト ON) の場合の挙動です。
    • Cross-row navigation が OFF の場合は、物理キー Home と同じく上の行に移動せず左端セル先頭にとどまります。
  • 参考: セル内の 2 行目以降の行頭: それ以上は移動しません。物理キー Home と同等です。

■ ソースモードの場合の動作

ソースモードの場合はテーブルの中で次のように動作します。2 点目以降はライブプレビューと同様の動作です。

  • 最初の | より前: HOME は実行されず、何も起こりません。
  • セル内の 2 行目以降の先頭 (<br> の直後): それ以上は移動しません。(ライブプレビューと同じです)
  • セル内の 1 行目先頭: ライブプレビューと同じく、左隣のセルの末尾への移動、あるいは (左端セルなら) 上の行の右端セルの末尾への移動・テーブルからの脱出を行います。(Cross-row navigation 設定・ノート冒頭の制約も同様です)
  • それ以外: セル内の生の Markdown 記法の手前 (本文の先頭)、またはセル内の行の先頭に移動します。
END

このコマンドは物理キー End (macOS の場合は fn + →) と同等の挙動をすることを目的としています。一部の場面では物理キー End よりも一層のテーブル対応を図っています。

この END コマンドは「For everyone」画面で物理キー End キーに割り当てることができますが、ここでの「物理キー End」はこのコマンドを割り当てていない、そのままの状態の End キーを指します。

■ 物理キー End と同等の動作

プレーンテキストおよびテーブルセル内の行において、行の末尾に向かって最大 2 段階で移動します。

  • ステップ 1: 現在の表示行の右端に移動します。(長いテキストが折り返して表示されていて、カーソルが最後の表示行にない場合)
  • ステップ 2: 行の末尾 (論理行の末尾) に移動します。

プレーンテキストの論理行末で END を実行してもそれ以上は移動しません。

■ 物理キー End と異なる動作

プレーンテキストおよびテーブルセル内での 2 段階動作に関して、物理キー End と異なる点は次のとおりです。物理キー End と同等の動作が基本ですが、細部の挙動は設定で調整可能になっています。(→ Visual line movement 設定)

  • ステップ 1 での差異: Visual line movement を OFF にした場合は最初の表示行右端への移動動作をスキップします。

テーブルのセル末尾 (複数の行がある場合は最終行の末尾) では物理キー End と異なる挙動をします。物理キー End はセル末尾にとどまり、隣のセルや行には移動しません。

  • 右端以外のセルの末尾: 同じ行の右隣のセルの先頭に移動します。
  • 最終行以外の右端セル末尾: 下の行の左端セル先頭に移動します。
    • Cross-row navigation (デフォルト ON) の場合の挙動です。
    • Cross-row navigation が OFF の場合は、物理キー End と同じく下の行に移動せず右端セル末尾にとどまります。
  • 最終行の右端セル末尾: テーブルから抜け出して下の行に移動します。
    • Cross-row navigation (デフォルト ON) の場合の挙動です。
    • Cross-row navigation が OFF の場合は、物理キー End と同じくテーブルから抜け出さずに右端セル末尾にとどまります。
    • テーブルがノート末尾にある場合は、下に行が追加されてそこに着地します。(DOWN コマンドと同じ挙動です)
  • 参考: セル内の最終行以外の行末: それ以上は移動しません。物理キー End と同等です。

■ ソースモードの場合の動作

ソースモードの場合はテーブルの中で次のように動作します。

  • 最初の | より前: 最初のセルの本文の先頭に移動します。(HOME とは対照的に、この場合は何も起こらないわけではありません)
  • <br> タグの途中: <br> タグを越えて、次のセル内行の右端に移動します。
TOP / BOTTOM

このコマンドは、Windows の Ctrl + Home / End、macOS の command + ↑ / ↓ と同等の挙動をすることを目的としています。一部の場面ではこれらの物理キーよりも一層のテーブル対応を図っています。

TOP / BOTTOM コマンドは「For everyone」画面でこれらと同じキーに割り当てることができますが、ここでの「物理キー」は、このコマンドを割り当てていない、そのままの状態のキーを指します。

■ 物理キーと同等の動作

テーブルの外ではノートの先頭 (TOP) または末尾 (BOTTOM) に移動します。TOP コマンドでは Smart home は適用されません。

■ 物理キーと異なる動作

ノート先頭または末尾にテーブルがある場合は物理キーと異なり、より自然な「先頭」「末尾」に移動します。

  • TOP: 見出し行左端セルの先頭に移動します。
    • 物理キー (Ctrl + Home / command + ↑) では、ノートの先頭がテーブルだった場合にテーブルの最終行に移動していました。
  • BOTTOM: テーブルの一番下の行の右端セル末尾に移動します。
    • 物理キー (Ctrl + End / command + ↓) では、ノートの末尾がテーブルだった場合に見出し行の先頭に移動していました。
Page down / Page up

このコマンドは、物理キー Page Down / Page Up (macOS の場合は fn + ↓ / ↑) と同等の挙動をすることを目的としています。一部の場面ではこれらの物理キーよりも一層のテーブル対応を図っています。

この Page down / Page up コマンドは「For everyone」画面でこれらの同じキーに割り当てることができますが、ここでの「物理キー」は、このコマンドを割り当てていない、そのままの状態のキーを指します。

■ 物理キーと同等の動作

スクロール範囲にプレーンテキストしかない場合 (テーブル・コールアウト・埋め込みがない場合)、表示を 1 画面分下 (Page down) または上 (Page up) にスクロールします。スクロール後もカーソルは画面上の同じ位置にとどまります。

■ 物理キーと異なる動作

スクロール範囲にテーブル・コールアウト・埋め込み (![[...]]) が含まれる場合に、1 画面分の移動先がテーブルやコールアウト等の内部であっても正しく移動します。

これは UP / DOWN コマンドを 1 画面分繰り返すことで実現しています。

物理キー (Page Down / Page Up、fn + ↓ / ↑) は、本来ならテーブルの内部に着地するべき場合でも、必ずテーブルの外までカーソル移動していました。

Word left / Word right

このコマンドは、Windows の Ctrl + ← / →、macOS の option + ← / → と同等の挙動をすることを目的としています。一部の場面ではこれらの物理キーよりも一層のテーブル対応・日本語対応を図っています。

このコマンドは「For everyone」画面でこれらと同じキーに割り当てることができますが、ここでの「物理キー」は、このコマンドを割り当てていない、そのままの状態のキーを指します。

■ 物理キーと同等の動作

  • プレーンテキストおよびセル内テキスト: Word left は (前の) 単語の先頭へ、Word right は (次の) 単語の末尾へ移動します。
    • 現在の行に単語が残っていない場合は行をまたぎます。
    • 行をまたぐ際、空行はスキップします。
    • テーブル内ではセル内テキストの先頭 / 末尾から隣のセルの末尾 / 先頭に移動し、Cross-row navigation 設定が ON の場合は行の左端 / 右端から隣の行の反対側に移動します。
  • テーブルへの侵入: プレーンテキストからテーブルに入る場合、Word left は最下段右端セルに、Word right は見出し行左端セルに侵入します。
  • テーブルからの脱出: Word left が見出し行の左端セルで、Word right が最下段の右端セルで、それぞれさらに前 / 次の単語を探そうとするとテーブルから抜け出して上 / 下の行に移動します。
    • ただし Cross-row navigation 設定が OFF の場合はテーブルから抜け出さずにセルの先頭 / 末尾にとどまります。
    • テーブルがノート冒頭にある場合 (Word left)、脱出せず、何も起こりません。(UP / LEFT / HOME と同様)
    • テーブルがノート末尾にある場合 (Word right)、テーブルの下に空行が追加されてそこに移動します。

■ 物理キーと異なる動作

  • テーブルへの侵入時の着地位置: Word left は最下段右端セルの最後の単語の先頭に、Word right は見出し行左端セルの最初の単語の末尾に着地します。
    • プレーンテキストの行またぎ時の流儀を踏襲しています。物理キーはプレーンテキストでは単語の先頭 / 末尾に着地するにもかかわらず、テーブル侵入時だけ単純にセルの末尾 / 先頭で止まっていました。
  • セルの先頭 / 末尾: 左隣 / 右隣のセルの末尾 / 先頭の単語に移動します。
    • 物理キーはセルをまたいでは移動しません。
  • 日本語対応: 日本語のテキストでも辞書ベースの単語分割によって単語移動します。
    • 物理キーは空白・句読点だけで区切るため、漢字・ひらがなの連続はひとつの長い単語として認識されていました。

Editing​

Kill line

このコマンドは Emacs の kill-line 風の挙動を再現することを念頭においています。macOS 版 Obsidian の control + K と異なり、連続操作を蓄積して Ctrl + Y で貼り付けできます。一方で本物の Emacs の kill-line とは異なり、キルリング (履歴つきバッファ) は持たず、OS のクリップボードを介して他のアプリとコピー & ペーストできるようにしています。

■ Kill line の具体的な動作

  • テーブルの外、およびライブプレビューのセル内:
    • ここでは、ライブプレビューのセル内における「行末」は Shift + Enter で改行した箇所を指します。
    • Kill したテキストは OS のクリップボードに保存されます。
    • カーソルが行末にない場合: カーソル位置から行末またはセル末尾までを Kill します。
    • カーソルが行末にある場合: 改行を Kill し、次の行と結合します。
    • ファイル末尾、またはセル末尾にいる場合: 何もしません。
  • ソースモードのテーブルセル内:
    • ソースモードにおいては「行末」は <br> の直前の位置を指します。(ライブプレビューで Shift + Enter した箇所はソースモードでは <br> として表示されます)
    • Kill したテキストは OS のクリップボードに保存されますが、このとき <br> は改行に、\| は | に置き換えて保存します。
    • カーソルが行末にない場合: カーソル位置から行末またはセル末尾までを Kill します。
    • セル内テキストの行末 (<br> の前) にいる場合: <br> タグを Kill し、次のセル内行と結合します。(見た目上は「<br>」が削除されてテキストが詰まります)
    • セル末尾 (セルの境界) にいる場合: 何もしません。
  • 連続 Kill: 連続して Kill line を行うと、OS クリップボードに Kill 内容を追記していきます。
    • 連続 Kill 以外の編集操作を行うと蓄積は止まります。(カーソル移動、入力、マウスクリック)
    • OS 側にクリップボード履歴機能がある場合は、連続 Kill が逐次的にクリップボード履歴に残ります。
  • OS のコピー / カットとの相互作用: Windows の Ctrl + C / X、macOS の command + C / X を押すと連続 Kill 動作は止まります。
  • マルチカーソル時の動作: それぞれのカーソル位置で Kill line します。
    • クリップボードには複数の Kill 内容を改行で結合した状態で格納します。

■ Smart join

オプション設定により、行の結合の際に Markdown に最適化した動作をさせることができます。

  • Smart join: 設定画面で Smart join が ON の場合は、次の行の冒頭にある Markdown を削除した上で結合します。
    • 削除対象となるのは Smart home でスキップされる Markdown 記法です。
    • Smart home (standard) が ON の場合は、リスト、番号付きリスト、チェックボックス、インデント、引用を削除します。
    • Smart home (advanced) も ON の場合は、それに加えて見出し、脚注、コールアウトを削除します。

例えば「|」をカーソル位置とすると、

- 箇条書きテキスト| (ここで Kill line すると)
- 箇条書きの2行め

こうなります。

- 箇条書きテキスト箇条書きの2行め

同様に引用ブロックの場合は

> 引用テキスト| (ここで Kill line すると)
> 引用の2行目

こうなります。

> 引用テキスト引用の2行目
Set mark

範囲選択モードを開始します。このコマンドは Emacs の set-mark コマンドに相当します。Obsidian 標準の Shift + カーソル移動による範囲選択と相互に統合されています。

■ Set mark の具体的な動作

  • 範囲選択モードがオフの時:
    • 現在のカーソル位置を始点として範囲選択モードを開始します。
    • テーブルの外、ライブプレビューのセル内、ソースモードのテーブルセル内、いずれも有効です。
  • 範囲選択モードがオンの時:
    • 範囲選択モードがオンの状態でのカーソル移動で、選択範囲が拡大 / 縮小します。(LEFT / RIGHT / UP / DOWN / HOME / END / TOP / BOTTOM / Word left / Word right / Page up / Page down)
      • マルチカーソル状態で TOP / BOTTOM を実行すると、全てのセカンダリカーソルが消え、プライマリカーソルからノート冒頭または末尾まで選択状態となります。
      • それ以外のコマンドはマルチカーソルのそれぞれについて選択範囲が変化します。
    • 範囲選択は Obsidian 標準の範囲選択と統合されています。Shift + カーソルキーやマウスドラッグで範囲選択を開始すると自動的に Set-mark の始点がセットされ、以後 RIGHT / LEFT 等のコマンド(Ctrl + P / N / B / F 等)で範囲を拡大縮小できます。逆に Set-mark で開始した範囲選択を Shift + カーソルキーで継続して範囲拡大縮小できます。
    • 範囲選択中のカーソル移動でテーブルに差し掛かると、テーブル全体を一気に選択状態にしたうえでテーブルを通り抜けます。
    • セル内での範囲選択はセル境界を越えることができません。(それ以上カーソル移動せずに止まります)
    • 範囲選択モードがオンの状態で再度 Set mark すると、現在までの範囲選択をリセットして現在のカーソル位置を改めて始点としてセットします。
  • 範囲選択モードの自動解除: 以下の操作を行うと始点は解除されます。
    • Deselect コマンドの実行
    • 編集操作コマンドの実行 (Kill line、Kill region、Copy region、Yank、Uppercase / Lowercase / Capitalize word、Delete char、Transpose chars、Kill word left / right、Undo / Redo)
    • OS 標準のコピー / カット / ペースト、Backspace / Delete
    • Key upgrade していない物理カーソルキーでのカーソル移動
    • マウスクリックでのカーソル移動
    • セルを跨ぐカーソル移動の実行 (Move to cell left / right / above / below、Exit table above / below)
    • ノートの切り替え
  • マルチカーソルへの対応:
    • マルチカーソル状態で Set mark すると、すべてのカーソル位置に始点がセットされ、カーソル移動でそれぞれのカーソルが選択範囲を持ちます。
Kill region

選択中のテキストを Kill (カット) し、OS のクリップボードに保存します。Emacs の kill-region (C-w) に相当するコマンドです。

■ Kill region の具体的な動作

  • 選択範囲が空の場合: 何もしません。
  • テーブルの外、およびライブプレビューのセル内: 選択したテキストを Kill します。
    • 選択範囲は複数行にまたがることができます。
    • ライブプレビューのセル内では、選択は同じセル内に収まっている必要があります。セルをまたぐ選択、テーブルの行をまたぐ選択の場合は何もしません。同じセル内であれば Shift + Enter で作られた改行をまたぐことができます。
  • ソースモードのテーブルセル内: 選択したテキストを Kill します。
    • 選択範囲は同じセル内に収まっている必要があります。セルの境界である | をまたいで選択している場合は何もしません。
    • 同じセル内であれば <br> をまたぐ選択も可能です。このときクリップボードには <br> は改行に、\| は | に置き換えて保存します。
  • 連続 Kill の停止: Kill region は常に連続 Kill の蓄積をリセットします。Kill したテキストは OS のクリップボードに追記されるのではなく、それまでの内容を置き換えます。
  • マルチカーソル時の動作: それぞれのカーソルの選択範囲を Kill region します。
    • クリップボードには複数の Kill 内容を改行で結合した状態で格納します。

■ OS 標準のカットとの違い

  • 複数セルにまたがる選択: Obsidian 標準のカット (Ctrl + X / command + X) はセル単位の構造的な操作として扱いますが、Kill region は複数セルにまたがる選択状態には対応していません。(何もしません)
  • ソースモードのテーブルセル内、クリップボードの中身: OS 標準のカットは <br> や \| をそのままクリップボードにコピーします。Kill region はソースモードであってもテーブル内からの Kill であることを判別し、これらを改行や | に変換してから保存します。
Copy region

選択中のテキストを OS のクリップボードにコピーします。Kill region と違い、テキストは削除されません。

■ Copy region の具体的な動作

  • 選択範囲が空の場合: 何もしません。
  • テーブルの外、およびライブプレビューのセル内: 選択したテキストをコピーします。
    • 選択範囲は複数行にまたがることができます。
    • ライブプレビューのセル内では、選択は同じセル内に収まっている必要があります。セルをまたぐ選択、テーブルの行をまたぐ選択の場合は何もしません。同じセル内であれば Shift + Enter で作られた改行をまたぐことができます。
  • ソースモードのテーブルセル内: 選択したテキストをコピーします。
    • 選択範囲は同じセル内に収まっている必要があります。セルの境界である | をまたいで選択している場合は何もしません。
    • 同じセル内であれば <br> をまたぐ選択も可能です。このときクリップボードには <br> は改行に、\| は | に置き換えて保存します。
  • 連続 Kill の停止: Kill region と同様、常に連続 Kill の蓄積をリセットします。保存される内容も、追記ではなく既存の内容を置き換えます。
  • マルチカーソル時の動作: それぞれのカーソルの選択範囲を Copy region します。
    • クリップボードには複数の Copy 内容を改行で結合した状態で格納します。

■ OS 標準のコピーとの違い

  • 複数セルにまたがる選択: Obsidian 標準のコピー (Ctrl + C / command + C) はセル単位の構造的な操作として扱いますが、Copy region は複数セルにまたがる選択状態には対応していません。(何もしません)
  • ソースモードのテーブルセル内、クリップボードの中身: OS 標準のコピーは <br> や \| をそのままクリップボードにコピーします。Copy region はソースモードであってもテーブル内からのコピーであることを判別し、これらを改行や | に変換してから保存します。
Yank

OS のクリップボードの内容をカーソル位置に貼り付けます。Emacs の yank (C-y) に相当するコマンドです。

■ Yank の具体的な動作

  • クリップボードが空の場合: 何もしません。クリップボードの読み取りに失敗した場合は、代わりに直前に Kill / Copy した内容を使用します。
  • テーブルの外、およびライブプレビューのセル内: クリップボードの内容をそのまま貼り付けます。ライブプレビューのセル内では、含まれる改行 (\n) がそのままセル内の改行 (Shift + Enter の区切り) になります。
  • ソースモードのテーブルセル内: テーブル構造を壊さないよう、貼り付け前に改行は <br> に、パイプ文字 (|) は \| にエスケープされます。
  • 連続 Kill の停止: Yank も常に連続 Kill の蓄積をリセットします。
  • リスト記号の重複回避: Obsidian 1.14 以降の標準ペーストと同様に、リスト項目 (-・- [ ] ・1. 等) の行に貼り付ける際、既存のリスト記号と重複しないように調整します。
  • マルチカーソル時の動作: マルチカーソルの数とクリップボードに格納された行数が一致する場合・一致しない場合で挙動が変わります。
    • 一致する場合: クリップボード内の各行をそれぞれのカーソル位置に 1 行ずつ貼り付けます。
    • 一致しない場合: それぞれのカーソル位置にクリップボードの内容全体をそれぞれ貼り付けます。

■ OS 標準のペーストとの違い

  • テーブルの外、およびライブプレビューのセル内: テキストを貼り付ける場合、OS 標準のペーストと Yank に違いはありません。複数行のテキストやパイプ文字 (|) を含む場合でも正しく挿入されます。
  • 複数セルがクリップボードに格納されている場合: 複数セルをカット / コピーしたとき、OS のクリップボードにはテーブル構造として格納されています。Obsidian 標準のペーストではテーブルとして貼り付けできますが、Yank ではテーブルのソースコードを貼り付けるだけです。(プレーンテキストに貼り付けるとテーブルとして表示されますが、セル内に貼り付けるとテーブルの Markdown ソースが貼り付けられます)
  • 画像がクリップボードに格納されている場合: OS のクリップボードに画像が入っている場合、Obsidian 標準のペーストは画像ファイルを Vault に格納した上で埋め込みリンク (![[Vaultに格納したファイル名]]) を挿入しますが、Yank はファイル名をテキストとして貼り付けるだけです。
  • ソースモードのテーブルセル内: OS 標準のペーストは改行やパイプ文字を変換せずにそのまま挿入するため、複数行のテキストやパイプ文字を含む内容を貼り付けるとテーブル構造が壊れます。Yank は改行を <br> に、パイプ文字は \| に変換してから挿入するため、テーブル構造を保ちます。
Delete char

このコマンドは物理キー Delete (macOS の場合は ⌦、または fn + ⌫) と同等の挙動をすることを目的としています。

■ 物理キー Delete と同等の動作

以下の場所では物理キー Delete と同じ動作をします。

  • テキスト内、およびライブプレビューのセル内:
    • カーソル位置の文字を削除します。(前方削除)
    • 行末では改行を削除し、次の行と結合します。
    • ライブプレビューのセル内では Shift + Enter の区切りが行末となりますが、セルの末尾では何もしません (次のセルへは進みません)。

■ 物理キー Delete と異なる動作

以下の点では物理キー Delete と異なる挙動をします。

  • ソースモードのテーブルセル内: 物理キー Delete はセルの境界 (|) を考慮せず、| や前後の空白を 1 文字ずつ削除してしまいます。一方、このコマンドはテーブル内であることを判別し、境界文字を削除しません。
Undo / Redo

この 2 つのコマンドは Obsidian 自身の「元に戻す」「やり直す」そのものです。ノート全体の編集履歴を戻す / やり直すだけで、特定のセルや単語を対象にしたテーブル対応・日本語対応のような特別な処理は行いません。

■ これらをコマンドとして用意した理由

Undo (元に戻す) は Windows では Ctrl + Z、macOS では command + Z、Redo (やり直す) は Windows では Ctrl + Shift + Z または Ctrl + Y、macOS では command + Shift + Z ですが、これらは Obsidian 標準のホットキー設定画面やコマンドパレットに出てきません。このため標準以外のキー (例えば Emacs 同等のキー) に割り当てを変更することができません。

このプラグインでは、他のすべてのコマンドと同じように好きなキーに割り当てられるようにコマンドとして用意しました。

Kill word left / Kill word right

この 2 つのコマンドは、単語単位でテキストを Kill します。日本語テキストでも辞書ベースでの単語分割により正しく扱います。

これらのコマンドは「For everyone」画面で物理キー (Windows では Ctrl + Backspace / Delete、macOS では option + ⌫ / ⌦) に割り当てることができますが、ここではこのコマンドを割り当てていない、そのままの状態のキーと同じ動作 / 異なる動作を示します。

■ 物理キーと同等の動作

  • テキスト内、およびライブプレビューのセル内:
    • Kill word left は左側の単語の先頭からカーソルまでを、Kill word right はカーソルから右側の単語の末尾までを Kill します。
    • 行頭 / 行末からは次の行に進んでいきます。
    • ライブプレビューのセル内では Shift + Enter の区切りが行頭 / 行末となりますが、セルの先頭 / 末尾を越えて前のセル / 次のセルに進むことはありません。

■ 物理キーと異なる動作

  • クリップボード連携と連続 Kill: 削除したテキストはクリップボードに保存されます。
    • Kill line と同様に連続 Kill によって削除内容がクリップボードに蓄積されます。Kill word と Kill line は混在可能です。
    • Kill word left はクリップボードの先頭に削除した単語を追加し、Kill word right は末尾に追加します。蓄積したテキストはクリップボード内で元の語順を維持します。
    • 物理キーでの単語削除はクリップボードと連携せず、後から貼り付けできません。
  • 日本語の扱い: 辞書ベースで日本語の単語を認識します。
    • このコマンドは辞書ベースの単語分割を使うため、日本語でも単語単位で削除します。
    • 物理キーでは空白や句読点までしか区切りを認識しないため、日本語の文章はひとつの長い単語として扱われ、まとめて削除されてしまいます。
  • テーブルに侵入しない: このコマンドはテーブルの手前で止まり、テーブルの中には入っていきません。
    • 物理キーの場合、特に下からの単語削除ではテーブル全体が削除されることがあります。
  • ソースモードのテーブルセル内: テーブル内であることを判別し、セルの境界である | の前で止まります。
    • セル内の <br> 区切りを行として、| をセル境界として認識します。ライブプレビューでセル境界を越えずに止まるのと同様に、ソースモードでも | を削除したり越えることはありません。
    • 物理キーの場合、ソースモードのテーブルは単なるテキストでしかなく、| も削除していくためにテーブルが壊れます。
  • マルチカーソル時の動作: それぞれのカーソル位置で Kill word left / Kill word right します。
    • クリップボードにはそれぞれの Kill 内容を改行で結合した状態で格納します。
    • 結合順序は常にカーソルのドキュメント上の順序で、Kill word left / right どちらの方向で実行したかには依存しません。
Uppercase word / Lowercase word / Capitalize word

カーソル位置または選択範囲のテキストを大文字・小文字・先頭大文字に変換します。これらのコマンドは現在の Emacs の upcase-dwim / downcase-dwim / capitalize-dwim (M-u / M-l / M-c) をベースにした DWIM (do-what-i-mean) 挙動となっています。

  • 選択範囲がある場合: 選択した範囲のテキストを変換します。
    • Uppercase / Lowercase は単語の区切りを意識せず、選択範囲に含まれる文字をすべて一律に大文字 / 小文字にします。
    • Capitalize は単語ごとに先頭の 1 文字だけを大文字にし、残りを小文字にします。(単語間の空白や句読点はそのまま残ります)
    • 変換後、カーソルは選択範囲の末尾に移動します。
  • 選択範囲がない場合: カーソル位置またはそれより右にある単語を変換します。
    • 変換後、カーソルは単語の末尾に移動します。
    • これは Emacs のクラシック版・DWIM 版のどちらの挙動とも異なります。Emacs はカーソル位置から単語の末尾までしか変換しませんが、このコマンドはカーソルが単語の途中にあっても単語全体を変換します。
  • テーブル対応: Word right と同様に、変換対象の単語を探す際にテーブルに入り、セルをまたぎ、テーブルを出ます。
    • Cross-row navigation 設定が OFF の場合は行をまたがず停止します。テーブルから出ることもありません。
    • 複数のセルを選択した状態ではこれらコマンドは何も行いません。
  • 全角文字対応: 全角アルファベットも半角同様に変換します。全角半角は混在していても構いません。
  • マルチカーソル時の動作: 各カーソルが独立して変換されます。あるカーソルの選択範囲が無効 (例えば Source Mode のテーブルセル境界を跨ぐ) であっても、他のカーソルの変換は妨げられません。
Transpose chars

カーソルの前後 2 文字を入れ替えます。Emacs の transpose-chars (C-t) を再現したコマンドです。

  • 行の途中にいる場合: カーソルの両側の 2 文字を入れ替え、カーソルは入れ替えた 2 文字の直後に移動します。
    • 連続して押すと 1 文字を右方向へ引きずっていくように動きます。
  • 行末にいる場合: 後ろに文字がないため、代わりに行末の直前 2 文字を入れ替えます。
    • ただし 1 行が 2 文字未満の場合は入れ替えられないので何もしません。
    • 2 文字以上の場合は入れ替えを行った上でカーソルは行末にとどまり、繰り返し押すと同じ 2 文字を交互に入れ替え続けることになります。
  • 行頭にいる場合: カーソル左側の (前の行の) 改行と、カーソル右側の行頭文字を入れ替えます。
    • 結果として行頭文字が前の行に吸い上げられたように見えます。
    • 入れ替え後、カーソルは改行の後ろに位置しますが、これは結果的に行頭に位置したまま移動していないことになります。
    • 繰り返し実行すると 1 文字ずつ上の行に吸い上げられ、行が空になると 0 文字行の行末となり、それ以降は何もしません。
  • ノートの先頭・末尾、セルの先頭・末尾にいる場合: 入れ替える文字が片側にないため、何もしません。
  • ソースモードのテーブル対応: テーブル内ではセルの左側の | をノート先頭、セルの右側の | を行末とみなし、これらの境界文字は移動せずテーブルを壊すことはありません。一方、セル内の <br> は実際の改行と同じ扱いになり、<br> タグ全体 (4 文字) をひとまとまりとして前後の文字と入れ替えます。(例: 「A<br>B<br>C」で「B」の先頭にカーソルがある場合、入れ替え後は「AB<br><br>C」になります)
  • 絵文字・拡張漢字対応: 絵文字などの、内部的に複数の文字分の長さを持つ文字も 1 文字として扱い、入れ替えます。(「🟩」「𠮷」などのサロゲートペア、「☺️」のような異体字セレクタ付きの絵文字)
  • マルチカーソル時の動作: それぞれのカーソル位置で独立して入れ替えを行います。あるカーソルが入れ替え不可能な位置 (ノート先頭など) にあっても、他のカーソルの入れ替えは妨げられません。
Select all

このコマンドは Obsidian 自身の「すべてを選択」に相当します。

■ 「すべてを選択」と同等の動作

  • テーブルの外にいる場合: ノート全体を選択します。
  • テーブルセル内にいる場合 (ライブプレビュー): ノート全体ではなく、現在のセルの内容全体を選択します。
  • いずれの場合も、カーソルは選択範囲の末尾に移動します。

■ 「すべてを選択」と異なる動作

  • 選択範囲の先頭に範囲選択の始点 (Set mark) をセットします。「すべてを選択」を実行した後で LEFT / RIGHT / UP / DOWN 等でカーソル移動すると選択範囲が変化します。
  • テーブルセル内にいる場合 (ソースモード): ソースモードの場合でもテーブル内であることを判別して、ノート全体ではなく現在のセルの内容全体を選択します。
    • この時セル先頭と末尾の空白は選択範囲から除外されます
    • 標準の「すべてを選択」ではテーブルを判別せず、ノート全体を選択していました。

■ これをコマンドとして用意した理由

Obsidian 標準の「すべてを選択」のショートカットは Windows では Ctrl + A ですが、これは HOME コマンドの Recommended hotkey になっています。Recommended hotkey 適用によりショートカットが上書きされてしまうものの、「すべてを選択」自体はホットキー割り当て可能なコマンドではないため、別のキーで実行できるようにするために新たにコマンドとして用意する必要がありました。

(元に戻す / やり直す と同様の理由です)

Deselect

このコマンドは Emacs の keyboard-quit (C-g) 相当のコマンドです。選択範囲のクリア、範囲選択の始点の解除、マルチカーソルの解除を行います。

■ Deselect の具体的な動作

  • 複数カーソル / 複数選択がある状態で実行すると、プライマリカーソルの選択範囲だけを残して他のカーソル / 選択範囲は消えます。
  • 選択範囲が一つだけの場合は、範囲選択を解除します。
    • つまり、マルチカーソルでそれぞれが範囲選択状態にある場合には 2 段階の解除動作となります。(複数選択 → 単一選択 → 選択解除)
    • この挙動は Esc キーの挙動と同等です。
  • 現在のカーソル位置は維持されます。
  • 範囲選択の始点は必ず全て解除されます。
    • Esc キーとはこの挙動が異なります。

Other hotkeys​

Recenter-top-bottom

カーソルのある行の表示位置を画面中央に移動します。続けて押すと上方・下方・また中央とサイクリックに切り替えます。これは現在の Emacs の recenter-top-bottom (C-l) に相当するコマンドです。

  • サイクリック動作: 押すたびに中央 → 上端 (2 行分の余白) → 下端 (2 行分の余白) の順にスクロール位置を切り替え、以降また中央に戻って繰り返します。
    • カーソルの位置自体は変わりません。スクロールするだけです。
    • カーソルの位置がプレーンテキストでもテーブル内でも、同じように動作します。
  • 巡回のリセット: キー入力やカーソル移動、マウスクリックなどの編集操作を行うと、次に押したときは中央から巡回しなおします。
    • ただし Kill line や Kill word left / right の実行では巡回はリセットされません。
    • Kill region・Copy region・Yank は巡回をリセットします。
Recenter

カーソルのある行の表示位置を画面中央に移動します。以前の Emacs の recenter (C-l) に相当します。

  • 具体的な動作: カーソルのある行が画面の垂直方向の中央に来るようにスクロールします。
    • カーソルの位置自体は変わりません。スクロールするだけです。
    • カーソルの位置がプレーンテキストでもテーブル内でも、同じように動作します。

Recommended hotkey は設定されていないので、スクロール位置が中央固定のスタイルがお好みの場合はプラグイン設定画面の「Open →」ボタンから手動でホットキーを割り当ててください。

Table navigation​

Move to cell left / right / above / below

指定した方向の隣接セルに移動するコマンドです。

■ Move to cell の具体的な動作

  • 移動先のセルの先頭にカーソルを着地します。
  • 左右方向: 常に現在の行の中にとどまります。行の左右端にいる場合は何もしません。(隣の行に回り込むことはありません)
  • 上下方向: 同じ列 (セル位置) を保ったまま、上下の行に移動します。テーブルの最初 / 最後の行にいる場合は何もしません。
  • ライブプレビューのテーブル内でのみ動作します。テーブルの外、およびソースモードでは何もしません。

■ Obsidian 標準のセル移動 (Tab / Shift + Tab) との違い

  • Obsidian 標準の Tab (右のセル) / Shift + Tab (左のセル) による右 / 左移動は
    • 移動先セルの内容全体を選択します。
    • 行の端からは下の行 / 上の行に回り込みます。
    • その際にテーブルの下端 / 上端からは新しい行を挿入します。
  • Move to cell right / Move to cell left では
    • セル移動しても範囲選択しません。
    • 常に現在の行にとどまります。(回り込みません)
Exit table above / below

今いるテーブルの外に移動します。

  • Exit table above はテーブルのすぐ上の行、Exit table below はすぐ下の行に着地します。
  • Smart home により着地行の先頭の Markdown はスキップされます。
  • テーブルがノート先頭にある場合 (Exit table above): 抜け出す先の行が存在しないため、テーブルの見出し行の左端セル先頭に着地します。
    • Smart home によりセル先頭の Markdown はスキップされます。
  • テーブルがノート末尾にある場合 (Exit table below): ノート末尾に空行を追加してそこに着地します。
  • ライブプレビューおよびソースモードでのテーブル内でのみ動作します。テーブルの外では何もしません。

Add cursor​

Add cursor above / below

現在のカーソルの上の行または下の行にマルチカーソルを追加します。

■ このコマンドを追加した理由

  • Obsidian 標準の「上にカーソルを追加」「下にカーソルを追加」コマンドは、カーソルが追加される行やカラムの位置が不安定だったり、テーブル内では動作しないことがありました。
  • このコマンドは「論理行の上 / 下に追加」「同じ文字カラム位置に追加」「テーブル内でも動作」の一貫した挙動で再実装しています。

■ Add cursor above / below の具体的な動作

  • 現在のカーソルの上の行または下の行にマルチカーソルを追加します。
    • 表示行の上下ではなく論理行の上下です。また同じビジュアル位置の上下ではなく同じ文字カラム位置の上下です。
    • 上下の行が短く同じ文字カラム位置に追加できない場合には行末にカーソルが追加されます。この時、さらにカーソルを追加しても元の文字カラム位置には復元しません。
  • 追加された方のカーソルが「プライマリ」、元のカーソルが「セカンダリ」となります。
    • カーソルがひとつだけの場合、それがプライマリカーソルです。
    • カーソルの追加は常にプライマリカーソルに対して上 / 下に追加されます。
    • カーソルを移動させた時、プライマリカーソルがテーブルに侵入すると全てのセカンダリカーソルが消え、シングルカーソルに戻ります。セカンダリカーソルだけがテーブルに侵入しようとした場合は、そのセカンダリカーソルが消えます。
  • プレーンテキスト内あるいはテーブルのひとつのセル内では動作しますが、プレーンテキストとテーブルに跨ったり、セルを跨ってのマルチカーソル追加はできません。