↩️

Notepad++の行の折り返しを文字単位にする方法

に公開

はじめに

Notepad++の「画面端で折り返し」機能を使っていると、日本語文中に英単語を混ぜた場合、想定外の位置で折り返されることがあります。

たとえば次のような文章では、英単語「Windows」の後ろの半角空白で折り返される場合があります。

Windows Updateの後にパソコンを再起動する必要があります。不具合が発生した状況に応じて、システムの復元を検討してください。

このような折り返しは、文章中に英単語と日本語が混在する場合に見た目を崩す原因となります。

この記事では、Notepad++の折り返しを「単語単位」から「文字単位」に変更する方法を紹介します。

折り返しモードの仕組み

Notepad++はテキストエディタエンジンとして Scintilla を利用しています。
Scintillaでは、折り返しモードを SCI_SETWRAPMODE 関数によって制御します。
そのドキュメントでは、次の4つのモードが定義されています。

  • SC_WRAP_NONE (0): 行の折り返しを無効にする
  • SC_WRAP_WORD (1): 単語またはスタイル境界で折り返す
  • SC_WRAP_CHAR (2): 任意の文字間で折り返す(アジア言語向け)
  • SC_WRAP_WHITESPACE (3): 空白文字で折り返す

この中で、日本語と英語が混在する文章に最も適しているのは SC_WRAP_CHAR (2) です。

しかし、Notepad++の標準メニューで切り替えられる折り返しモードはSC_WRAP_WORD (1)のみです。

AutoHotkeyを使う方法

次のAutoHotkey v2スクリプトを使うと、Notepad++の折り返しモードを SC_WRAP_NONE (0)SC_WRAP_CHAR (2) の間で切り替えることができます。

/**
 * 折り返しモードをSC_WRAP_NONE (0)とSC_WRAP_CHAR (2)で交互に切り替える。
 * Notepad++がアクティブな状態で実行してください。
 */
NPP_toggle_wrapMode() {
    SCI_SETWRAPMODE := 2268
    SCI_GETWRAPMODE := 2269
    SC_WRAP_NONE := 0
    SC_WRAP_CHAR := 2

    npHwnd := WinGetID("A")
    sciHwnd := ControlGetHwnd("Scintilla1", "ahk_id " npHwnd)

    n_mode := SendMessage(SCI_GETWRAPMODE, 0, 0, sciHwnd)
    if n_mode == 0 {
        SendMessage(SCI_SETWRAPMODE, SC_WRAP_CHAR, 0, sciHwnd)
    } else {
        SendMessage(SCI_SETWRAPMODE, SC_WRAP_NONE, 0, sciHwnd)
    }
}

!z:: NPP_toggle_wrapMode()

このスクリプトを実行すると、Alt + Zキーで折り返しモードを手軽に切り替えられます。

NppExecプラグインを使う方法

NppExecプラグインを利用する場合は、プラグインのコマンド入力欄に次のように入力して実行します。

SCI_SENDMSG 2268 2

このコマンドを実行すると、折り返しモードが文字単位(SC_WRAP_CHAR)に設定されます。
試した限りでは、SCI_SENDMSG SCI_SETWRAPMODE 2 という呼び出し方では反映されませんでした。

注意点

  • Scintillaコマンドを直接送信して折り返しモードを変更しても、Notepad++の表示メニューの「画面端で折り返す」のチェック状態には反映されません。

参考リンク

まとめ

日本語と英語が混在する文を扱う場合、Notepad++の折り返しを文字単位に設定するとレイアウトが安定します。
AutoHotkeyやNppExecを活用して文字単位の折り返しに設定すれば、作業中のストレスを大幅に減らせます。

Discussion