Как настроить vim для автоматического изменения цвета фона в зависимости от того, включена CAPS LOCK или нет? - PullRequest
11 голосов
/ 14 ноября 2008

Я заядлый пользователь vim и недавно начал писать код SQL. Я люблю писать свои операторы SQL в CAPS и иногда забываю выключить CapsLock 'off', и затем я быстро сажаю свой код, прежде чем я понимаю, что происходит.

До сих пор я не нашел способа определить, находится ли клавиша CapsLock , кроме как смотреть на клавиатуру (что требует от меня отвлечься от экрана, который я считаю большой задержкой).

В идеале я бы хотел, чтобы vim автоматически менял цвет фона всякий раз, когда CapsLock включен, но я хотел бы согласиться на какой-нибудь другой экранный индикатор статуса CapsLock как компромисс.

Ответы [ 6 ]

5 голосов
/ 17 июня 2009

Человек, который предложил отображать строчные буквы в верхний регистр, находится на правильном пути, но нам нужно добавить еще несколько деталей. Хитрость заключается в отображении ключевых слов SQL в верхний регистр. Затем вы можете ввести их в нижнем регистре, а vim преобразует их в верхний регистр. Это делается с помощью сокращений, а не отображений. Например, если вы создаете аббревиатуру

:iab ATT American Telephone and Telegraph

тогда каждый раз, когда вы набираете «ATT» в своем коде, Vim автоматически переводит его в «Американский телефон и телеграф», как только вы нажимаете пробел. (Попробуйте! Это весело!)

Итак, создайте новый файл и начните вводить сокращения для всех ключевых слов SQL.

iab select SELECT
iab like LIKE
iab where WHERE
...

Поскольку вы хотите, чтобы эти сокращения применялись только при редактировании исходного кода SQL, сохраните этот файл в ~ / .vim / after / ftplugin / sql.vim. Команды в этом файле будут выполнены, когда Vim обнаружит, что он открыл Файл SQL.

Определение типа файла работает, только если вы включите его, поэтому убедитесь, что ваш .vimrc имеет такие строки:

set nocompat
filet detect plugin on

Как только вы начнете работать, вы должны сэкономить время и иметь меньше запястного канала от постоянного нажатия клавиши Shift!

4 голосов
/ 14 ноября 2008

Ближайший ответ - ответ Кента. Vim не видит CapsLock (или NumLock , или ScrollLock , или любой другой ключ-модификатор сам по себе), поскольку состояние этих ключей не передается через терминал.

Обратите внимание, что теоретически gVim может видеть эти модификаторы, но на практике это не так. Клавиатура gVim лучше, чем у vim, во многих других отношениях.

3 голосов
/ 14 ноября 2008

То, что я сделал, привязало мой ключ блокировки кепки к клавише «Compose», так что мой ключ capslock фактически отсутствует, и я просто заставляю себя использовать SHIFT вместо этого. :)

Вы могли бы хотеть попробовать, это может звучать мазохистски, но в конечном итоге это лучше. Некоторые утверждают, что блокировка Caps избыточна.

1 голос
/ 14 ноября 2008

Лучшее, что я могу вам дать - это vim переключать цвет фона всякий раз, когда происходит CAPSLOCK. нажата клавиша в vim.

Vim не может обнаружить только клавишу CAPSLOCK. Я могу дать вам сопоставление, чтобы вы могли использовать какую-то другую клавишу (в этом примере, F3), чтобы она действовала как клавиша CAPSLOCK для режима вставки, и изменила цвет фона, когда включены все заглавные буквы. Надеюсь, это даст вам необходимую функциональность.

Поместите следующее в ~ / .vimrc или в соответствующий ~ / .vim / ftplugin / .vim:

    " let the case be toggled in normal mode
    map <expr> <F3> ToggleInsertCase()
    " let the case be toggled in insert mode
    imap <expr> <F3> ToggleInsertCase()

    let toUpper = 0
    func! ToggleInsertCase() 
        let g:toUpper = 1 - g:toUpper
        if (g:toUpper == 1)
            highlight Normal ctermbg=Blue " the background color you want when uppercased
            " convert all the letters to uppercase in insert mode
            let i = char2nr('a')
            while i <= char2nr('z')
                let c = nr2char(i)
                exe 'inoremap' c toupper(c)
                let i = i + 1
            endwhile
        else
            highlight Normal ctermbg=Black " the background color you want normally
            " let letters be as normal in insert mode
            let i = char2nr('a')
            while i <= char2nr('z')
                let c = nr2char(i)
                exe 'iunmap' c 
                let i = i + 1
            endwhile
        endif
        " don't insert anything when this function is called in normal mode
        return ""
    endfunc

Это позаимствовано у capslock.vim Тима Папы .

Если вы действительно хотите использовать для этого клавишу CAPSLOCK, в зависимости от вашей платформы, есть множество бесплатных приложений, которые позволяют вам переназначить ваш ключ CAPSLOCK для чего-то другого, чтобы вы могли настроить его так, чтобы при нажатии CAPSLOCK vim (и все остальное) получало F3. Или что угодно. Однако это может помешать другим приложениям получить ключ CAPSLOCK (если только приложение «ключ-переназначение» не является умным), что может быть проблематично.

0 голосов
/ 05 декабря 2008

Я согласен с Кентом и переназначить клавишу Caps Lock на клавишу управления. Я использовал AutoHotKey, чтобы сделать это на блоках Windows, но есть параметр реестра, как описано здесь и во многих других местах. Если вы не используете Windows, вы также можете легко переназначить клавишу caps lock на платформах MacOS и Unix X.

Удобство , а не , когда случайно заблокирован колпачок, намного превышает те несколько раз в году, которые я бы на самом деле хотел!

0 голосов
/ 14 ноября 2008

Почему бы не иметь плагин filetype для файлов .sql, которые содержат команды imap для преобразования всех нажатий клавиш в прописные буквы. Таким образом, вам никогда не придется переключать фактическую клавишу capslock на клавиатуре, и все будет хорошо, когда вы вернетесь к коду.

Добавьте следующее в файл $ VIM / vimfiles / ftplugin / sql_too.vim:

imap a A
imap b B
imap c C
imap d D
imap e E
imap f F
imap g G
imap h H
imap i I
imap j J
imap k K
imap l L
imap m M
imap n N
imap o O
imap p P
imap q Q
imap r R
imap s S
imap t T
imap u U
imap v V
imap w W
imap x X
imap y Y
imap z Z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...