Текстовый редактор Vim я использую практически для всех задач, связанных с интерактивным редактированием текста: для файлов конфигурации и исходного кода, в качестве среды верстки LaTeX, для написания писем совместно с mutt и даже в качестве внешнего редактора в веб-браузере.
Устоявшиеся горячие клавиши управления курсором [hjkl] стали перемещаться за пределы редактора, например, в командную оболочку (в сочетании с модификатором).
Однако хотелось бы иметь привычные горячие клавиши в графических приложениях.
Собственно, дальше мы поговорим о настройке среды GTK. Возможно, многие знают о существовании привязок gtk-emacs, расположенных в /usr/share/themes/Emacs, которые достаточно просто встроить в пользовательский файл конфигурации GTK. Для Вима, к сожалению, нет готовых рецептов из коробки; кроме того, реализация многорежимности — задача нетривиальная, поэтому придется обходиться одним режимом с помощью модификаторов.
Клавиши управления курсором было решено назначить на Mod1+[hjkl], начало/конец строки Mod1+[wq], плюс описать классические привязки типа ^H, ^U и ^W. Без лишних слов, вот примеры файлов: ~/.
gtkrc-2.0
~/.binding "vim-like" { bind "<ctrl>u" { "delete-from-cursor" (paragraph-ends, -1) } bind "<ctrl>h" { "delete-from-cursor" (chars, -1) } bind "<ctrl>w" { "delete-from-cursor" (word-ends, -1) } bind "<alt>j" { "move-cursor" (display-lines, 1, 0) } bind "<alt>k" { "move-cursor" (display-lines, -1, 0) } bind "<alt>l" { "move-cursor" (logical-positions, 1, 0) } bind "<alt>h" { "move-cursor" (logical-positions, -1, 0) } bind "<shift><alt>j" { "move-cursor" (display-lines, 1, 1) } bind "<shift><alt>k" { "move-cursor" (display-lines, -1, 1) } bind "<shift><alt>l" { "move-cursor" (logical-positions, 1, 1) } bind "<shift><alt>h" { "move-cursor" (logical-positions, -1, 1) } bind "<alt>q" { "move-cursor" (paragraph-ends, -1, 0) } bind "<shift><alt>q" { "move-cursor" (paragraph-ends, -1, 1) } bind "<alt>w" { "move-cursor" (paragraph-ends, 1, 0) } bind "<shift><alt>w" { "move-cursor" (paragraph-ends, 1, 1) } } class "GtkEntry" binding "vim-like" class "GtkTextView" binding "vim-like"
config/gtk-3.0/settings.ini gtk-key-theme-name=Vim
~/.
themes/Vim/gtk-3.0/gtk-keys.css @binding-set gtk-vi-text-entry
{
bind "<ctrl>u" { "delete-from-cursor" (paragraph-ends, -1) };
bind "<ctrl>h" { "delete-from-cursor" (chars, -1) };
bind "<ctrl>w" { "delete-from-cursor" (word-ends, -1) };
bind "<alt>j" { "move-cursor" (display-lines, 1, 0) };
bind "<alt>k" { "move-cursor" (display-lines, -1, 0) };
bind "<alt>l" { "move-cursor" (logical-positions, 1, 0) };
bind "<alt>h" { "move-cursor" (logical-positions, -1, 0) };
bind "<shift><alt>j" { "move-cursor" (display-lines, 1, 1) };
bind "<shift><alt>k" { "move-cursor" (display-lines, -1, 1) };
bind "<shift><alt>l" { "move-cursor" (logical-positions, 1, 1) };
bind "<shift><alt>h" { "move-cursor" (logical-positions, -1, 1) };
bind "<alt>q" { "move-cursor" (paragraph-ends, -1, 0) };
bind "<shift><alt>q" { "move-cursor" (paragraph-ends, -1, 1) };
bind "<alt>w" { "move-cursor" (paragraph-ends, 1, 0) };
bind "<shift><alt>w" { "move-cursor" (paragraph-ends, 1, 1) };
}
@binding-set gtk-vi-text-view
{
bind "j" { "move-cursor" (display-lines, 1, 0) };
bind "k" { "move-cursor" (display-lines, -1, 0) };
bind "l" { "move-cursor" (logical-positions, 1, 0) };
bind "h" { "move-cursor" (logical-positions, -1, 0) };
}
@binding-set gtk-vi-tree-view
{
bind "j" { "move-cursor" (display-lines, 1) };
bind "k" { "move-cursor" (display-lines, -1) };
bind "l" { "move-cursor" (logical-positions, 1) };
bind "h" { "move-cursor" (logical-positions, -1) };
}
GtkEntry {
gtk-key-bindings: gtk-vi-text-entry;
}
GtkTextView {
gtk-key-bindings: gtk-vi-text-entry, gtk-vi-text-view;
}
GtkTreeView {
gtk-key-bindings: gtk-vi-tree-view;
}
Статья была взята за основу Привязки клавиш Vi в GTK , где описана аналогичная процедура для сред только для чтения.
Теги: #*nix #настройка Linux #GTK #vim #горячие клавиши
-
«И Не Стоит Спать С Сисадмином»
19 Oct, 24 -
Яндекс Создал Собственный Jabber-Клиент
19 Oct, 24 -
Миранда Становится Дружелюбнее?
19 Oct, 24 -
Детали, Которые Имеют Значение
19 Oct, 24