Стремительное развитие ИИ в последние годы привело к невиданному росту популярности Markdown. Почти все современные LLM — от ChatGPT до Claude — по умолчанию выдают ответы в этом формате. Мы привыкли оформлять в нем заметки в Obsidian, писать промпты, вести документацию в GitHub и общаться в рабочих мессенджерах. Markdown стал «лингва-франка» современного интернета.

Но есть одна проблема. Использовать Markdown с русским языком — это боль.

Вам нужно поставить заголовок? Alt+Shift -> # -> Alt+Shift обратно. Нужно выделить код? Снова чечётка по клавишам переключения раскладки. Стандартная русская раскладка в Windows будто застряла в прошлом веке. Клавиша Shift+3 выдает нам символ , который в 2024 году нужен крайне редко, в то время как жизненно необходимые решетки, собаки и скобки заставляют нас постоянно прыгать между языками.

Я решил эту проблему для Windows с помощью небольшого скрипта на AutoHotkey (v2).

Идея: Слой AltGr

В большинстве европейских раскладок клавиша AltGr (правый Alt) используется для ввода дополнительных символов. В русской раскладке она практически не задействована (за исключением знака рубля на некоторых системах).

Я решил превратить её в «магическую кнопку», которая позволяет вводить любые символы из английской раскладки, не выходя из русской.

Что умеет мой конфиг?

  1. Весь цифровой ряд: Теперь AltGr + 1...0 выдает те же символы, что и Shift + 1...0 на английской раскладке (!, @, #, $, %, ^, &, *, (, )). Теперь ввести @ для почты (askar@zhakenov.pro) или # для заголовка можно мгновенно.

  2. Markdown-friendly: Квадратные скобки [] и обратные кавычки ` для кода теперь всегда под рукой.

  3. Правильная типографика: Вместо обычного дефиса я добавил длинное тире на AltGr + -.

  4. Умные кавычки и скобки: Для русской типографики я использовал клавиши Б и Ю.

    • AltGr + , -> <

    • AltGr + . -> >

    • AltGr + Shift + , -> «

    • AltGr + Shift + . -> »

Реализация на AutoHotkey v2 (Windows)

Этот скрипт автоматически определяет, что включена русская раскладка, и активирует модификаторы только для неё. При переключении на английский — всё работает как обычно.

#Requires AutoHotkey v2.0
#SingleInstance Force

; Скрипт активен только при русской раскладке (0x0419)
#HotIf GetKeyboardLayout() == "0x0419"

; --- Полный верхний ряд (AltGr + цифра = US Shift символ) ---
<^>!1::SendText "!"
<^>!2::SendText "@"
<^>!3::SendText "#"
<^>!4::SendText "$"
<^>!5::SendText "%"
<^>!6::SendText "^"
<^>!7::SendText "&"
<^>!8::SendText "*"
<^>!9::SendText "("
<^>!0::SendText ")"
<^>!-::SendText "—" ; Длинное тире
<^>!=::SendText "+"

; --- Квадратные и фигурные скобки ---
<^>![::SendText "["
<^>!]::SendText "]"
<^>!+[::SendText "{"
<^>!+]::SendText "}"

; --- Пунктуация и кавычки-ёлочки (Б и Ю) ---
; Обычное нажатие дает символы для кода/Markdown, Shift — типографику
<^>!,::SendText "<"
<^>!.::SendText ">"
<^>!+,::SendText "«"
<^>!+.::SendText "»"

; --- Markdown и код ---
<^>!;::SendText ":"
<^>!'::SendText "'"
<^>!\::SendText "|"
<^>!/::SendText "/"
<^>!s::SendText "_"
<^>!k::SendText "``" ; Обратная кавычка
<^>!SC029::SendText "``" ; Клавиша под Esc (тильда)

#HotIf

; Функция проверки текущей раскладки
GetKeyboardLayout() {
    WinID := WinExist("A")
    if !WinID
        return 0
    ThreadID := DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
    return Format("0x{:04X}", DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt") & 0xFFFF)
}

Как внедрить?

  1. Скачайте AutoHotkey v2.

  2. Создайте файл RussianMarkdown.ahk, вставьте код и запустите его.

  3. Чтобы забыть о проблеме навсегда, добавьте ярлык скрипта в папку автозагрузки Windows (Win+R -> shell:startup).

Итог

В эпоху ИИ, когда мы постоянно общаемся с машинами через текстовые интерфейсы, скорость набора спецсимволов становится критически важной. Для пользователей Windows этот простой скрипт превращает ввод текста в бесшовный процесс. Вам больше не нужно «переключать мозг» вместе с языком — вы просто пишете, а нужные символы всегда там, где вы ожидаете их увидеть.