Emacs. Автодополнение. Helm
Helm — фреймворк автодополнения (completion) и сужения выбора для Emacs.
Содержание
1 Общая информация
- Репозиторий: https://github.com/emacs-helm/helm.
- Helm является форком пакета
anything.el
и может считаться его преемником.
2 Конфигурирование
- Минимальная конфигурация:
- Расширенная конфигурация:
1(require 'helm) 2(require 'helm-config) 3 4;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs. 5;; Changed to "C-c h". Note: We must set "C-c h" globally, because we 6;; cannot change `helm-command-prefix-key' once `helm-config' is loaded. 7(global-set-key (kbd "C-c h") 'helm-command-prefix) 8(global-unset-key (kbd "C-x c")) 9 10(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to run persistent action 11(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB work in terminal 12(define-key helm-map (kbd "C-z") 'helm-select-action) ; list actions using C-z 13 14(when (executable-find "curl") 15 (setq helm-google-suggest-use-curl-p t)) 16 17(setq helm-split-window-in-side-p t ; open helm buffer inside current window, not occupy whole other window 18 helm-move-to-line-cycle-in-source t ; move to end or beginning of source when reaching top or bottom of source. 19 helm-ff-search-library-in-sexp t ; search for library in `require' and `declare-function' sexp. 20 helm-scroll-amount 8 ; scroll 8 lines other window using M-<next>/M-<prior> 21 helm-ff-file-name-history-use-recentf t 22 helm-echo-input-in-header-line t) 23 24(defun spacemacs//helm-hide-minibuffer-maybe () 25 "Hide minibuffer in Helm session if we use the header line as input field." 26 (when (with-helm-buffer helm-echo-input-in-header-line) 27 (let ((ov (make-overlay (point-min) (point-max) nil nil t))) 28 (overlay-put ov 'window (selected-window)) 29 (overlay-put ov 'face 30 (let ((bg-color (face-background 'default nil))) 31 `(:background ,bg-color :foreground ,bg-color))) 32 (setq-local cursor-type nil)))) 33 34 35(add-hook 'helm-minibuffer-set-up-hook 36 'spacemacs//helm-hide-minibuffer-maybe) 37 38(setq helm-autoresize-max-height 0) 39(setq helm-autoresize-min-height 20) 40(helm-autoresize-mode 1) 41 42(helm-mode 1)
- По умолчанию Helm в качестве основного префикса использует
C-x c
. - В этой конфигурации предлагается в качестве префикса использовать
C-c h
.
3 Использование
Интерфейс автодополнения с помощью Helm несколько отличается стандартного.
- Вместо явного нажатия табуляции в Helm вы вводите части строки, которую хотите найти, разделённые пробелами. В Helm эти строки называются шаблонами. Шаблоны также могут быть регулярными выражениями.
- Helm попытается выполнить поиск и сортировку по наибольшему соответствию сверху вниз. Лучшее совпадение находится вверху, можно нажать
RET
и выбрать его. - Можно перемещаться по буферу Helm с помощью:
C-n
иC-p
(или стрелок<up>
и<down>
) для перемещения вверх/вниз;C-v
и =M-v =для перехода к следующей/предыдущей странице;M-<
иM->
для перемещения в начало и конец буфера.
- Можно отметить кандидатов с помощью
C-SPC
(когда вам нужно выполнить действие со несколькими кандидатами по выбору).M-a
выделяет всё. - Можно вставить отмеченные кандидаты в текущий буфер с помощью
C-c C-i
. - Если текущее горизонтальное окно Helm мало, то можно переключить его на вертикальное окно с помощью
C-t
. Повторное нажатиеC-t
снова возвращает окно Helm в горизонтальное положение.
C-x b
запускаетhelm-mini
(список буферов). Если вы отмечаете более одного буфера,RET
открывает выбранные буферы.Когда используется Helm, то никогда не используется
TAB
для завершения префиксов (в отличии отIdo
).- В Helm во время ввода список кандидатов автоматически обновляются.
- В Ido необходимо нажать
TAB
, чтобы получить список кандидатов. - В Helm необходимо забыть о привычке использовать
TAB
для поиска кандидатов. Это необычно для людей, переходящих на Helm.
Когда вы выполняете команду Helm, вы входите в сеанс Helm.
- Сеанс Helm — это специальное состояние для работы с функциями Helm.
- Во время сеанса Helm всегда открыт выделенный буфер Helm.
- Когда вы выходите из сеанса Helm, буфер Helm закрывается.
В Helm чаще всего используются 3 команды:
- Вход в меню действий — с помощью
TAB
.- Действие — это команда, которая выполняется для отмеченных кандидатов (одного или нескольких) и завершает текущий сеанс Helm.
- Меню действий — это текстовое меню, в котором перечислены действия, которые вы можете выполнить.
C-z
выполняет функциюhelm-execute-persistent-action
. Постоянное действие — это действие, не завершающее сеанс, используемое в сеансе Helm.- В некоторых сеансах Helm, таких как
helm-find-files
илиhelm-mini
, вы можете выбрать более одного кандидата и выполнить над ними какие-либо действия.
- Вход в меню действий — с помощью
Можно для удобства поменять местами
TAB
иC-z
в приведённых выше настройках, посколькуhelm-execute-persistent-action
используется чаще, чемhelm-select-action
:В сеансе Helm, если вам нужна помощь, используйте
C-c ?
.
4 Преимущества Helm
- Простой и последовательный интерфейс.
- Каждый сеанс Helm начинается с одного и того же: подсказка для ввода шаблонов поиска и буфер Helm для отображения результатов по мере ввода пользователем.используют Helm.
- Интерактивность.
- По своей природе Helm очень интерактивен: когда пользователь вводит текст, результаты немедленно обновляются в буфере Helm.
- Сосредоточьтесь на том, чтобы сначала найти то, что вы хотите, а потом решить, что с этим делать. С Helm не нужно думать о том, что вы собираетесь делать с кандидатом, пока вы его не найдёте.
- Механизм сопоставления.
- Поиск с помощью регулярных выражений.
- Производительность.
5 Работа с текстом под курсором
- Если вы уже находитесь в сеансе Helm, вы все равно можете получить доступ к текущему буферу редактирования с помощью следующих комбинаций клавиш:
C-w
копирует слово за курсором, начиная с курсора до конца слова, в приглашение Helm (минибуфер);M-n
копирует символ под курсором.
- Если параметр
helm-mode
активирован, команды справки также автоматически распознают символы под курсором и используют интерфейс Helm для интерактивного выбора. Например:C-h f
(describe-function
) автоматически принимает слово под курсором как значение по умолчанию для поиска функции.C-h v
(describe-variable
) автоматически принимает слово под курсором как значение по умолчанию для поиска переменной.C-h w
(where-is
) автоматически принимает слово под курсором для отображения привязки клавиш для команды.
6 Автоматическое изменение размера
- Helm может автоматически изменять размер своего буфера, чтобы соответствовать количеству кандидатов, если вы включить
helm-autoresize-mode
:1(helm-autoresize-mode t)
- Можно настроить минимальную и максимальную высоту, которую Helm может принимать с помощью переменных
helm-autoresize-max-height
иhelm-autoresize-min-height
.- По умолчанию
helm-autoresize-max-height
установлено в значение 40, что означает, что буфер Helm имеет максимальную высоту 40% от высоты текущего фрейма. helm-autoresize-min-height
указывает минимальную высоту для буфера Helm в процентах от текущей высоты фрейма.
- По умолчанию
- Если вы не хотите, чтобы размер окна Helm изменялся, вы можете установить
helm-autoresize-max-height
равнымhelm-autoresize-min-height
.
7 Команды
7.1 Команда helm-M-x
Привязка ключей :
Нет привязки клавиш по умолчанию. Мы должны дать ему один:
( global-set-key ( kbd “Mx” ) ‘helm-Mx ) Описание :
M-xи увидеть разницу. Вы увидите буфер со списком команд в Emacs. Некоторым из вас это может не понравиться, потому что поначалу это кажется излишним. Однако, даже если вам действительно не нравится, пожалуйста, потерпите меня до конца.
Теперь введите li pa; правильно li, пробел и pa. Вы увидите, list-packagesнаходится на вершине. Сюрприз! Попробуем другой ввод. Теперь введите pa ^li, и вы получите list-packageв качестве первой записи.
helm-M-xтакже лучше, чем по умолчанию M-x, потому что он предоставляет привязки клавиш прямо рядом с командами, а TAB предоставляет вам встроенную документацию этой команды в другом буфере.
Начиная с версии 1.6.5, helm-M-xвозможно нечеткое сопоставление кандидатов, но по умолчанию это не включено. Чтобы включить нечеткое сопоставление, добавьте следующий параметр:
( setq helm-Mx-fuzzy-match t ) ;; опциональное нечеткое сопоставление для helm-Mx ПРИМЕЧАНИЕ . Вы должны выполнить привязку helm-M-xк Mx вручную. В противном случае вы все равно получите завершение Helm, но с помощью vanilla Mx , который не предоставляет вышеуказанных функций, таких как отображение привязок клавиш и TAB для открытия встроенной документации. Еще одна важная вещь: вы должны передать аргумент префикса ПОСЛЕ того, как вы запустите helm-M-x, потому что ваш аргумент префикса будет отображаться в модельной линии, когда он находится в helm-M-x буфере. Передача аргумента префикса BEFORE helm-M-x не имеет никакого эффекта .
Демо :
helm-mx.gif
7.2 Команда helm-show-kill-ring
Привязка ключей :
Нет привязки клавиш по умолчанию. Мы должны дать ему один:
( global-set-key ( kbd “My” ) ‘helm-show-kill-ring ) Описание :
Вы помните связывающий C-y цикл kill ring ? Тем не менее, работа со стандартным списком убийств болезненна, потому что у вас есть бремя помнить невидимую вещь, то есть список убийств, в какой позиции вы что убиваете. Чтобы просмотреть список убийств, вы должны нажать Ch v и ввести текст kill-ring , чтобы увидеть содержимое списка убийств, а это некрасиво.
helm-show-kill-ringрешает эту проблему: Helm показывает список убийств в удобочитаемом формате и позволяет сузить список, введя подстроки кандидатов. Вы освобождаетесь от когнитивного бремени стандартного My .
Если вы следуете моей конфигурации Helm, M-yпривязывается к helm-show-kill-ring. Попробуйте и посмотрите! Гораздо проще, чем по умолчанию.
Демо :
helm-kill-ringв действии (демонстрация начинается, когда вы видите STARTв минибуфере):
helm-kill-ring.gif
7.3 Команда helm-mini
Привязка ключей :
Нет привязки клавиш по умолчанию. Мы должны дать ему один:
( global-set-key ( kbd “Cx b” ) ‘helm-mini ) Чтобы включить нечеткое сопоставление, добавьте следующие настройки:
( setq helm-buffers-fuzzy-matching t helm-recentf-fuzzy-match t ) helm-miniсостоит из нескольких источников:
Текущие открытые буферы под заголовком Buffers. Недавно открытые файлы в шапке Recentf. Позволяет создать новый буфер, нажав RET под заголовком Create Buffer. Вы можете перемещаться между группами с помощью клавиш со стрелками <влево> и <вправо> . Или вы можете просто прокрутить вниз/вверх с помощью Cv и Mv .
Вы можете отфильтровать буферы по основному режиму, используя шаблон *<major-mode>. Например, *diredсужается до буферов Dired. Вы также можете отфильтровать буферы, принадлежащие к основному режиму, добавив !их в шаблон. Например, *!diredвыберите все буферы, которые не находятся в режиме Dired.
Вы также можете выбрать буферы в определенном каталоге, используя шаблон directory. Например, /.emacs.d/сужается до буферов, которые находятся только внутри .emacs.d. Добавьте !перед шаблоном для обратной версии. Например, !.emacs.d/сужается до буферов не в .emacs.d.
Вы даже можете использовать helm-miniдля сужения до буферов, которые содержат регулярное выражение в своем содержимом, добавляя @перед шаблоном поиска. Например, вы можете выбрать буферы, которые содержат только строку «тест»: @test. Если вы хотите увидеть расположение строки в буферах, отметьте весь буфер с помощью Ma и Cs во время helm-miniсеанса, чтобы переключиться на helm-moccur. Вы можете пометить буферы для поиска с помощью C-SPC . При переключении на helm-moccurотображаются совпадения, находящиеся в выбранных буферах. Вы также можете работать occur только с текущим буфером с аргументом префикса: Cu Cs; это полезно, когда вы уже пометили буферы, но не хотите снимать пометку только для просмотра только в буфере. Однако в целом Cu Cs вам не понадобится .
Значение цветов и префиксов для буферов:
Удаленные буферы имеют префикс «@». Красный => Файл буфера был изменен на диске внешним процессом. Indianred2 => Буфер существует, но его файл удален. Оранжевый => Буфер изменен, и его файл не сохранен на диск. Курсив => Нефайловый буфер. Некоторые темы Emacs меняют цвета. Вы должны проверить соответствующий цвет в своих цветовых темах.
Пример:
Если я ввожу шаблон: *lisp ^helm @moc, Helm сужает список, выбирая только буферы, которые находятся в режиме lisp, запускают helm и сопоставляют «moc» в их содержимом. Если я хочу указать более одного основного режима, разделите их с помощью ,, например, *!lisp,!sh,!funбудут перечислены все буферы, кроме тех, которые находятся в режиме lisp, sh-mode и фундаментальном режиме. Если я ввожу шаблон: *lisp ^helm moc. Обратите внимание, что на @этот раз helm не будет искать буферы режима lisp, начинающиеся с «helm» и имеющие в своем имени «moc». Если я введу шаблон: *!lisp !helmHelm сузится до буферов, которые не находятся в режиме «шепелявости» и не соответствуют «рулю». Если я введу шаблон: helm w3Helm сузит буферы, которые находятся в любом подкаталоге «helm» и соответствуют w3.
helm-miniпохож на интерактивную версию ibuffer.
Демо :
руль-мини.gif
Демонстрация начинается, когда вы видите Eval: STARTв минибуфере. Обратите внимание, что демонстрационное использование helm-buffers-listпочти такое же, как и helm-mini. Единственная разница в том, что helm-buffers-listиспользуется ido-virtual-buffersдля перечисления недавно использованных файлов, а helm-miniиспользует recentf.
Все буферы C выбираются с использованием шаблона *C. В демонстрации я также выбираю буферы Tcl с помощью *Tcl, а затем снова переключаюсь на буферы C с помощью *C. Я только хочу иметь буферы, которые содержат только строку crash. Для этого я добавляю пробел, затем добавляю шаблон @crash. После начального шаблона поиска я передаю текущий выделенный буфер helm-moccur( moccurс интерфейсом Helm ) с помощью Cs . Кандидатов можно фильтровать постепенно, добавляя больше шаблонов, например, я добавил memoryдля фильтрации буферов, содержащих строку «memory», среди буферов, содержащих crash. Вы также можете пометить несколько буферов с помощью C-SPC или пометить все буферы с помощью Ma для поиска всех буферов, перечисленных в helm-mini. Как видите, по мере того, как я фильтровал, количество кандидатов уменьшалось, как показано в модели. В конце концов, в результате фильтрации осталось 12 буферов, а не всего 253 буфера. Демонстрация выше теперь является частью домашней страницы Helm .
Похожие команды :
helm-multi-files: эта команда выводит список буферов и последних файлов и файлов в текущем каталоге. Однако, когда совпадений не найдено, helm-miniспрашивает, хотите ли вы создать новый буфер, выделив единственную запись, которая выглядит следующим образом:
helm-новый-файл-buffer.gif
пока helm-multi-filesпоказывает пустой буфер. Однако вы можете начать helm-locateсеанс поиска нужного файла по всей файловой системе, нажав Cc p . По умолчанию helm-for-files привязан к <prefix> f(текущий префикс Cc h ).
helm-buffer-list: аналогично helm-mini, но вместо списка последних файлов из recentf, он использует ido-virtual-buffers, который является списком недавно посещенных файлов, управляемых ido. Виртуальные буферы не содержат путей. В зависимости от ваших предпочтений вы можете использовать эту команду вместо helm-mini. Чтобы включить нечеткое сопоставление ido-virtual-buffers, если вы уже установили helm-buffers-fuzzy-matching, tвы также получите нечеткое сопоставление для ido-virtual-buffers. Команда:helm-find-files Привязка ключей :
<prefix> Cx Cf или Cx Cf (префикс Cx c по умолчанию или Cc h , если установлен). Это довольно длинная последовательность клавиш, и *=helm-find-files= заслуживает лучшей привязки:
( global-set-key ( kbd “Cx Cf” ) ‘helm-find-files ) Описание :
helm-find-filesэто навигация по файлам на стероидах:
helm-find-filesможет выполнять нечеткое сопоставление кандидатов в текущем каталоге. например, “fob” или “fbr” завершат “foobar”. Вы также можете выполнить постоянное действие, которое привязано к Cz (по умолчанию) или TAB , если вы используете мою конфигурацию, чтобы сузить текущий кандидат выделения; Cz или TAB еще раз, чтобы просмотреть содержимое буфера. Вы можете прокручивать другой буфер вверх/вниз с помощью M-<next> и M-<preor> . В качестве альтернативы вы можете нажать Cj , чтобы сузить список до кандидата выделения, и еще раз Cj , чтобы просмотреть содержимое другого буфера. Кл возвращается. Вы также можете подняться на один уровень каталога с помощью Cl . ПРИМЕЧАНИЕ : если вы используете Cl , Helm поднимается на один уровень вверх и помещает курсор в каталог, из которого вы только что вышли. Если вы хотите подняться и навести курсор на родительский каталог, в командной строке Helm введите ../. После того, как вы поднялись с помощью Cl , вы можете вернуться к точно посещенным каталогам с помощью Cr . Чтобы создать каталог, введите новое имя, которого нет в текущем каталоге, и добавьте /его в конце. После создания каталога Helm продолжает работу в этом каталоге. Чтобы создать новый файл, введите имя и выберите верхнюю строку, рядом [?]с которой стоит символ. По умолчанию Helm всегда выбирает первое совпадение в каталоге. Вы можете вызвать grepтекущую выделенную запись с помощью Cs . Cu Cs выполняет рекурсивный grep. Введите ~/в конце шаблона, чтобы быстро добраться до домашнего каталога. Введите /в конце шаблона, чтобы быстро добраться до корня вашей файловой системы. Введите ./в конце шаблона, чтобы быстро добраться до каталога по умолчанию (начальный запуск сеанса). Если вы находитесь в каталоге по умолчанию, переместите курсор вверх. Вы можете выполнить дополнительные действия с выделенной записью, запустив helm-select-action, которая привязана к TAB по умолчанию и Cz в моей конфигурации. Гайд по каждому действию в меню действий написан в гайде Изучение больших проектов с помощью Projectile и Helm Projectile . Это написано там, потому что вы в конечном итоге будете использовать Projectile (управление проектами для Emacs, представленное в следующем разделе) для более эффективной навигации по файлам в любом месте и в любое время.
Демо :
Мне нужно было ввести в подсказку всего несколько символов, чтобы получить кандидата, которого я хотел среди множества кандидатов. Демонстрация начинается, когда вы видите STARTв минибуфере:
helm-find-files.gif
Найти файл в точке : Вы знали команду ffap? Он был представлен в части 1, но вот демонстрация:
ffap.gif
helm-find-filesЭто тоже можно сделать: все, что вам нужно сделать, это переместить точку на правильный путь к файлу, и Helm найдет правильный путь для вас, как на скриншоте. Теперь вам больше не нужно использовать отдельную команду для открытия файла в точке, а использовать ту же Cx Cf. Это действительно удобно.
Истории файлов и каталогов : С аргументом префикса helm-find-filesотображает список посещенных каталогов. Если он выбран в точке, он helm-find-filesзапускается в этом каталоге, и вы можете перемещаться оттуда.
Во время helm-find-filesсеанса вы можете получить список посещенных файлов и каталогов с помощью Cc h . Оттуда действие по умолчанию — RET , чтобы открыть файл/каталог в точке или продолжить, helm-find-filesначиная с этого файла/каталога.
Вы можете использовать Mp и Mn для перемещения назад и вперед между ранее посещенными каталогами.
Команда: helm-ff-do-grep, live grep в Helm Привязка ключей :
Изнутри helm-find-filesсеанса вы можете вызвать helm-ff-run-grepс помощью Cs поиск файла/каталога в выделенной записи в буфере Helm. С префиксным аргументом Cu рекурсивно ищет выбранный каталог.
Вы также можете сохранить результат в буфер Grep, используя действие Save results in Grep buffer. Обратите внимание, что этот буфер Grep создается Helm, а не Grep-буфер Emacs по умолчанию. Он имеет минимальные привязки клавиш. В *hgrep*буфере нажмите Ch m , чтобы просмотреть все привязки клавиш.
Описание :
Каждый раз, когда вы вводите символ, результат немедленно helmобновляется . grepВы можете использовать ack-grepдля замены grepэтой конфигурации:
( когда ( исполняемый файл-найти “ack-grep” ) ( setq helm-grep-default-command “ack-grep -Hn –no-group –no-color %e %p %f” helm-grep-default- рекурсивная команда “ack-grep -H –no-group –no-color %e %p %f” ) ) Демо :
live_grep.gif
Команда:helm-semantic-or-imenu Привязка ключей :
<prefix> i (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Средство Imenu предлагает способ поиска основных определений, таких как определения функций или определений переменных, в файле по имени. Вы можете запустить imenuкоманду индивидуально.
Semantic — это пакет, предоставляющий команды редактирования с учетом языка на основе «парсеров исходного кода». Если этот параметр включен, каждый посещаемый вами файл анализируется автоматически. Semantic обеспечивает превосходную поддержку C/C++. Чтобы включить семантический режим, выполните (semantic-mode 1).
Helm предлагает интерфейс как для Semantic, так и для Imenu одновременно: если в текущем буфере активен `semantic-mode’, используйте семантику для генерации тегов, в противном случае вернитесь к imenu. Если точка находится на символе, helm по умолчанию передает символ в подсказку ввода.
helm-semantic-or-imenuработает со многими режимами, такими как C/C++, Java, Python, Ruby, Emacs Lisp и Lisp в целом, сценарий оболочки, организационный режим…
Чтобы включить нечеткое сопоставление как для списка, так Semanticи для Imenuлистинга, добавьте следующий параметр:
( setq helm-semantic-fuzzy-match t helm-imenu-fuzzy-match t ) Использование :
Вызовите команду (по умолчанию Cc hi ). Вы можете использовать клавиши со стрелками или Cp/Cn для перемещения вверх и вниз между кандидатами. Вы также можете использовать C-<down> и C-<up> ; когда вы перемещаете выделение между тегами внутри семантического буфера Helm, точка также перемещается между местоположениями тегов. Приятной особенностью helm-semantic-or-imenuявляется то, что всякий раз, когда вы активируете команду, если точка находится внутри семантического тега (например, определения функции), выбор располагается в теге в буфере Helm. Это хорошо работает в сочетании с C-<down> и C-<up> для перемещения между определениями в вашем буфере. Helm дает вам более точный контроль: вы можете перемещаться между функциями, используя beginning-of-defun(привязанный к CMa ) и end-of-defun(привязанный к CMe ), но он также будет перемещать точку и прокручивать ваш буфер. Используя helm-semantic-or-imenu, у вас будет похожее поведение, и у вас будет больше вариантов: либо C-gвернуться обратно в позицию, где вы первоначально вызвали helm-semantic-or-imenu, потому что вам нужно было только просмотреть интерфейс функции (например, чтобы увидеть, какие типы параметров принимает функция), либо RETперейти к местоположению тега. helm-semantic-or-imenuВ настоящее время поддерживается только семантическая часть . Если буфер imenuподдерживается только командой, вы не сможете использовать эту функцию.
helm-semantic-or-imenuпредоставляет следующие типы семантических тегов:
Dependencies: зависимости текущего файла, определенные текущим основным режимом. Например, Dependenciesв C/C++ включают файлы заголовков. Когда вы выполняете постоянное действие над зависимостью, точка перемещается к местоположению этой зависимости в текущем окне. Variables: переменные, определенные в текущем буфере. Functions: функция определена в текущем буфере Provides: модули, которые предоставляет этот буфер; например, (provide …)выражение в Emacs Lisp. Если вы хотите отфильтровать по типу тега, введите знак вставки ^ (начало строки в регулярном выражении) и следуйте за первым символом этого типа. Например, чтобы увидеть только функциональные теги, введите ^fприглашение.
Демонстрация 1 :
DEMO (начать, когда START DEMOнаходится в минибуфере):
Во- первых, я использую helm-semantic-or-imenuдля перехода к функции helm-define-key-with-subkeys и перемещаю туда точку. Затем я начинаю helm-semantic-or-imenuснова, и предварительно выбран helm-define-key-with-subkeys. Затем я перемещаю точку на переменную helm-mapи helm-semantic-or-imenuснова выполняю две функции: helm-next-source и helm-previous-source. На этот раз вместо отображения текущего семантического тега, с которым я работаю (это helm-map), он показывает два других тега в семантическом буфере Helm. Это связано с тем, что я предоставил аргумент префикса перед запуском команды.
helm-semantic-or-imenu-2.gif
Демонстрация 2 :
Вот helm-semantic-or-imenuв действии, обратите внимание на подсказку “pattern: " в минибуфере:
Сначала я ограничиваюсь кандидатами, которые являются функциями с этим шаблоном в подсказке: Functi. Затем я сужаюсь до кандидатов, которые являются функциями и содержат voidв себе этот шаблон: functi void, эффективно выбирая функции, которые имеют тип void или принимают voidаргументы. Затем я сужаюсь до кандидатов, которые являются функциями и содержат int в себе этот шаблон: functi int, эффективно выбирая функции, которые имеют тип int или принимают intаргументы. Затем я сужаю список кандидатов, которые являются переменными и содержат u16 в них, эффективно выбирая только переменные, имеющие тип u16; то же самое для u32демо.
helm-semantic-or-imenu.gif
Нажмите RET , чтобы посетить место кандидата. Приведенные выше примеры являются просто демонстрационными примерами. Вы можете сузить поиск до всего, что захотите, с шаблонами поиска, разделенными пробелами, например, вы можете использовать два шаблона, «func» и часть имени функции, и Helm может сузить до него.
В демо вы видите такие вещи, как class u16и class u32; это потому, что u16и u32определены typedef.
7.4 Команда helm-man-woman
Привязка ключей :
<prefix> m (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
С помощью helm-man-woman, вы можете быстро перейти к любой записи man, используя интерфейс Helm, либо введя приглашение Helm, либо, если точка находится на символе, открыв справочную страницу в точке. Чтобы включить справочную страницу в точке, добавьте следующий код:
( добавить в список ‘helm-sources-using-default-as-input’ helm-source-man-pages ) Демо:
руль-мужчина-женщина.gif
Команда:helm-find Привязка ключей :
<prefix> / (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Обычно вы используете findкоманду с аргументами в терминале, затем нажимаете RET и ждете большого списка результатов, и если результат не такой, как ожидалось, повторяете все это. Вы можете сократить этот процесс, интерактивно получая результаты от Unix findдля каждого символа, который вы вводите в приглашение Helm.
Вы можете разделять шаблоны поиска пробелами. Однако, поскольку Helm использует findутилиту Unix, вам необходимо вводить шаблоны поиска в соответствии со строкой поиска find; используйте helm-man-womanдля чтения find справочной страницы.
По умолчанию при вызове helm-findвыполняется поиск только в текущем каталоге. С префиксным аргументом C-u(т . е C-u C-c h /. ) подсказка запрашивает каталог для поиска. helm-findможет быть вызван в helm-find-files сеансе с помощью Cc / . Чтобы открыть более одного файла, отметьте отдельных кандидатов с помощью C-SPC или отметьте все с помощью Ma , а затем RET . Вы можете переключиться на helm-find-filesCx Cf .
Если вы используете helm-findбольшой каталог и чувствуете, что обновление в реальном времени слишком медленное, вы всегда можете приостановить обновление в реальном времени с помощью C-! и возобновите обновление в реальном времени с помощью C-! потом.
Демо :
helm-find.gif
Команда:helm-locate Привязка ключей :
<prefix> l (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Аналогичен helm-find, но использует locateкоманду и принимает шаблоны поиска в соответствии с locateвходными данными. Используйте helm-man-womanдля чтения locateсправочной страницы. В Mac OS mdfindвместо этого используется . В Windows необходимо установить поисковую систему Everything ; как только вы установили Everything и представили es.exeEmacs через переменную окружения PATH, helm-locateвы будете использовать Everythingи работать из коробки без какой-либо настройки.
Чтобы использовать локальную базу данных, выполните helm-locateс аргументом префикса C-u.
Если вы используете helm-locateбольшой жесткий диск и чувствуете, что обновление в режиме реального времени слишком медленное, вы всегда можете приостановить обновление в режиме реального времени с помощью C-! и возобновите обновление в реальном времени с помощью C-! потом.
Чтобы включить нечеткое сопоставление в helm-locate, добавьте этот параметр:
( setq helm-locate-fuzzy-match t ) Обратите внимание, что в настоящее время он работает с locateкомандой в Linux. Если вы находитесь на другой платформе, не устанавливайте его, иначе у вас не будет никакого результата.
Демо :
helm-locate.gif
Команда:helm-occur Привязка ключей :
<prefix> Ms o (префикс Cx c по умолчанию или Cc h , если установлен). Так как это довольно длинная привязка, нам следует привязать более удобную последовательность клавиш:
( global-set-key ( kbd “Cch o” ) ‘helm-occur ) Описание :
Аналогично occur, но с использованием интерфейса Helm. По мере ввода совпадающие строки немедленно обновляются. Это удобно, когда вы хотите иметь список совпадений в текущем буфере для перехода туда и обратно. Нажмите TAB , чтобы временно переместить точку в положение выделенного в данный момент совпадения. Cg отменяет текущий сеанс Helm и возвращается в исходное место, где helm-occurон был вызван. RET при совпадении переходит к этому совпадению.
Демо :
Вы можете видеть, что кандидаты продолжают обновляться, когда я печатаю. Демонстрация начинается, когда вы видите STARTв минибуфере.
helm-occur.gif
Команда:helm-apropos Привязка ключей :
<prefix> a (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Предварительно настроенный руль для описания команд, функций, переменных и лиц - все в одной команде!. Он похож на Ch a , который работает apropos-command, но интерактив включает в себя больше, чем просто команды. helm-aproposобъединяет 5 источников:
Команды : Список всех доступных команд. Функция : Список всех доступных функций. Классы : Список всех классов, созданных defclass. См . Классы построения . Общие функции : Список всех функций, созданных defmethod. См. Методы написания Переменные : список всех доступных переменных. Лица : список всех доступных лиц. Атрибуты Helm : список всех атрибутов, которые можно использовать для создания исходного кода Helm. Полезно, если вы хотите написать расширение с помощью Helm. Чтобы включить нечеткое сопоставление, добавьте этот параметр:
( setq helm-apropos-fuzzy-match t ) Команда:helm-info-* Привязка ключей :
<prefix> h <key> (префикс Cx c по умолчанию или Cc h , если установлен); <key> по умолчанию является одним из g , i или r :
Ключ Связывание <префикс> хг Команда:helm-info-gnus <префикс> привет Команда:helm-info-at-point <префикс> час Команда:helm-info-emacs Описание :
Префикс для информационных команд — <prefix> h. Вы можете думать, h что это означает помощь , а <key> — это одна из информационных тем, чтобы ее было легче запомнить.
helmпредлагает широкий спектр информационных команд для различных тем. M-x helm infoчтобы увидеть эти команды, т.е. helm-info-as, helm-info-gdb… Вы можете легко искать информационные узлы с помощью интерфейса Helm и нажимать TAB на записи для просмотра. M-<next> переходит на следующую страницу, а M-<preor> переходит на предыдущую страницу в другом буфере.
У вас может быть больше helm-info-команд, например:
helm-info-gdb. helm-info-find. helm-info-elisp. ….
Используйте M-x helm-infoдля просмотра списка helm-info-команд, использующих префикс info по умолчанию: <prefix> hили привязки клавиш по вашему выбору.
Команда:helm-lisp-completion-at-point Привязка ключей :
<prefix> <tab> (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Если вы работаете с Emacs Lisp, эта команда предоставляет список доступных загруженных функций в Emacs. Чтобы получить список дополнений, сначала нужно написать префикс, пусть даже всего один символ. Затем выполните команду и получите список кандидатов на завершение. Чтобы включить нечеткое сопоставление, добавьте этот параметр:
( setq helm-lisp-fuzzy-completion t ) Команда:helm-resume Привязка ключей :
<prefix> b (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Эта команда позволяет вам возобновить предыдущий сеанс Helm вместе с вашими предыдущими шаблонами в приглашении. Например, если ваш последний сеанс helm был helm-ff-run-grepи вы ввели шаблоны в приглашении Helm, helm-resumeвозобновится этот сеанс вместе с вашим предыдущим вводом.
С аргументом префикса helm-resumeпозволяет выбирать среди всех существующих буферов Helm. helm-miniили helm-buffer-listне показывает существующие буферы Helm; они игнорируют его по умолчанию; но если вы запустите ibuffer, вы увидите список видимых там буферов Helm. Не убивайте их, иначе вы не сможете возобновить игру.
Это действительно удобно, когда у вас сложный ввод и этапы подготовки. Например, если в предыдущем сеансе Helm у вас было несколько шаблонов регулярных выражений, вам не нужно вводить их снова. Или в вашем предыдущем сеансе Helm вам нужно перейти в глубокий каталог, и helm-resumeэто поможет вам повторно использовать предыдущий сеанс, не повторяя все проблемы.
Команда:helm-all-mark-rings Привязка ключей :
<prefix> Cc SPC (префикс Cx c по умолчанию или Cc h , если установлен). Это довольно длинная последовательность клавиш, эта команда заслуживает лучшей привязки, например:
( global-set-key ( kbd “Ch SPC” ) ‘helm-all-mark-rings ) Описание :
Одна удобная команда. Это позволяет вам просматривать содержимое как локальных, так и глобальных колец меток в удобном интерфейсе, поэтому вы всегда можете вернуться туда, где вы были. Без этой команды, если вы хотите просмотреть кольца меток, вы должны запустить M-: и ввести mark-ringили global-mark-ringдля просмотра их содержимого. И даже в этом случае Emacs отображает только голое содержимое списков mark-ringи , то есть номер строки и ее буфер, вот так:global-mark-ring
(#<marker at 23614 in helm.org> #<marker at 2343 in setup-helm.el> #<marker at 4280 in helm.org> #<marker in no buffer> #<marker at 1271 in helm.org> #<marker at 643 in emacs-tutor.org> #<marker in no buffer> #<marker at 1 in setup-applications.el> #<marker at 1 in emacs-tutor3.org>)
С helm-all-mark-rings, у вас есть этот приятный интерфейс с подсветкой строки и синтаксиса:
helm-all-mark-rings.gif
Команда:helm-regexp Привязка клавиш : <prefix> r (префикс Cx c по умолчанию или Cc h , если он установлен).
Описание :
Предварительно настроенный руль для создания регулярных выражений. Эта команда полезна, когда вы хотите протестировать регулярное выражение в интерактивном режиме. С Cz доступны следующие действия :
Ключ Действие [f1] Kill regexp as sexp Сохраняет регулярное выражение в виде строки вkill-ring [f2] Query Replace Regexp Вызов query-replaceс текущим регулярным выражением для замены [ф3] Kill regexp Сохраняет регулярное выражение как есть в текущей подсказке Helm. Демо :
helm-regexp.gif
Команда:helm-register Привязка ключей :
<prefix> Cx ri (префикс Cx c по умолчанию или Cc h , если установлен). Давайте свяжем его с чем-то другим:
( global-set-key ( kbd “Cc h x” ) ‘управляющий-регистр ) Предварительно настроен для просмотра регистров Emacs. Просто выполнив helm-register, вы можете просмотреть, что находится в регистрах. RET или TAB вставляет содержимое выбранного регистра.
Ключ Действие [f1] Insert Register Вставить содержимое регистра в буфер [f2] Append Region to Register Добавить активную область к текущему содержимому в выбранном регистре [ф3] Prepend Region to Register Добавить активную область к текущему содержимому в выбранном регистре Демо :
helm-registers.gif
Команда:helm-top Привязка ключей :
<prefix> t (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Эта команда предоставляет интерфейс Helm для topпрограммы. Вы можете взаимодействовать с каждым процессом с помощью следующих действий:
Ключ Связывание [f1] убить (SIGTERM) [f2] убить (SIGKILL) [ф3] убить (СИГИНТ) [f4] убить (выбрать сигнал) helm-topконкретные команды:
Ключ Связывание Копия Cu Обновитьhelm-top МС Сортировать по командам оболочки депутат Сортировать по загрузке ЦП МЮ Сортировать по пользователю мм Сортировать по памяти userи shell commandsотсортированы по алфавиту.
Демо :
helm-top.gif
Команда:helm-surfraw Привязка ключей :
<prefix> s (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
surfrawпредоставляет быстрый интерфейс командной строки UNIX для множества популярных поисковых систем WWW и других мощных артефактов. Он восстанавливает google, altavista, dejanews, freshmeat, research index, slashdot…
helm-surfrawпредоставляет интерфейс Helm для surfrawпрограммы, который прост в использовании. Все, что вам нужно сделать, это ввести поисковый запрос, а затем Helm предоставляет ряд сервисов, таких как Google, Stackoverflow… для использования.
Демо :
helm-surfraw.gif
Команда:helm-google-suggest Привязка ключей :
<префикс> Cc g (префикс Cx c по умолчанию или Cc h , если установлен). Давайте свяжем его с чем-то другим:
( global-set-key ( kbd “Cc h g” ) ‘helm-google-suggest ) Описание :
Эта команда позволяет интерактивно вводить условия поиска и получать результаты от Google в буфере Helm. Затем вы можете открыть одного из кандидатов в других сервисах, таких как Google, Wikipedia, Youtube, Imbd, Google Maps, Google News. Если вы работаете в Windows, не печатайте слишком быстро, иначе вы получите ошибку, и вам придется отказаться от этого сеанса Helm.
Демо :
helm-google-suggest.gif
Команда:helm-color Привязка ключей :
<prefix> c (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Если вы хотите быстро просматривать и копировать шестнадцатеричные значения цветов, helm-colorпредусмотрена такая функция. Но helm-colorэто не просто палитра цветов. Реальное использование helm-colorдля настройки лица: команда перечисляет ВСЕ доступные лица с предварительным просмотром каждого лица в той же строке. Это делает настройку темы очень быстрой, потому что вы можете быстро просмотреть лицо с его цветом. Благодаря тому, как работает Helm, вы можете смотреть на группу лиц вместе, чтобы получить общее представление о том, хорошо ли цвета сочетаются друг с другом.
helm-colorсодержит две группы, с действиями в каждой:
Цвета: Ключ Действие [f1] или Cc N Copy Name Скопируйте название цвета в kill-ring [f2] или Cc R Copy RGB Скопируйте шестнадцатеричное значение в kill-ring [f3] или Cc n Insert Name Вставить название цвета в текущий буфер [f4] или Cc r Insert RGB Вставить шестнадцатеричное значение в текущий буфер Настроить лицо: Ключ Действие [f1] Customize Открыть окно настройки [f2] Copy Name Копировать имя лица Демо :
helm-color.gif
Команда:helm-eval-expression-with-eldoc Привязка ключей :
<prefix> C-: (префикс Cx c по умолчанию или Cc h , если установлен). C-: немного сложно нажимать, было бы лучше с:
( global-set-key ( kbd “Cc h M-:” ) ‘helm-eval-expression-with-eldoc ) Описание :
Эта команда позволяет вам вводить выражения Emacs Lisp и получать мгновенные результаты в буфере Helm для каждого введенного вами символа. Измененная привязка клавиш выше облегчает запоминание, поскольку запас eval-expressionпривязывается к M-: . Итак, с этого момента для оценки выражения без оперативного обновления используйте M-: , а с оперативным обновлением используйте Cc h M-: . Эта команда полезна, когда вы хотите опробовать команду с различными входными данными и хотите как можно быстрее увидеть результаты.
Демо :
helm-eval-expression.gif
Команда:helm-calcul-expression Привязка ключей :
<prefix> C-, (префикс Cx c по умолчанию или Cc h , если установлен).
Описание :
Эти команды предоставляют интерфейс Helm для calcкоманды. Что такое calc? Согласно Calc Manual :
Calc — это расширенный калькулятор и математический инструмент, работающий как часть среды GNU Emacs. Очень грубо основанный на калькуляторах серии HP-28/48, его многие функции включают в себя:
Выбор алгебраического или RPN (на основе стека) ввода вычислений. Целые числа произвольной точности и числа с плавающей запятой. Арифметика рациональных чисел, комплексных чисел (прямоугольных и полярных), форм ошибок со стандартными отклонениями, открытых и закрытых интервалов, векторов и матриц, дат и времени, бесконечностей, множеств, величин с единицами и алгебраических формул. Математические операции, такие как логарифмы и тригонометрические функции. Возможности программиста (побитовые операции, недесятичные числа). Финансовые функции, такие как будущая стоимость и внутренняя норма прибыли. Теоретико-числовые функции, такие как простая факторизация и арифметический модуль m для любого m. Особенности алгебраических манипуляций, включая символьное исчисление. Перемещение данных в обычные буферы редактирования и из них. Встроенный режим для работы с формулами и данными Calc непосредственно внутри любого буфера редактирования. Графика с использованием GNUPLOT, универсальной (и бесплатной) программы для построения графиков. Простое программирование с использованием макросов клавиатуры, алгебраических формул, алгебраических правил перезаписи или расширенного Emacs Lisp. Вы можете вводить допустимые calcматематические выражения, такие как +, -,*, /, sin, cos, tan, sqrt…. Чтобы извлечь максимальную пользу из этой команды, очевидно, вам следует внимательно изучить calcее, прочитав Руководство по Calc .
Демо :
helm-calc.gif
Команда:helm-eshell-history Привязка ключей :
Нет привязки к ключу. Давайте привяжем его к ключу, который будет использоваться в Eshell:
( требуется ’ helm-eshell )
( add-hook ’eshell-mode-hook #’ ( lambda () ( define-key eshell-mode-map ( kbd “Cc Cl” ) ‘helm-eshell-history ) ) ) ) Описание :
Если вы обычно повторно выполняете старую команду оболочки в Eshell с помощью Mr , helm-eshell-historyэто обеспечивает простой и эффективный способ работы с историей команд. Используя стандартный Mr , вы должны активно помнить прошлые команды, с которыми вы работали; иначе Eshell не сможет найти команду. Если вы забудете, вам придется ввести команду history , чтобы освежить память. helm-eshell-historyсочетает в себе два: вы можете интерактивно использовать регулярное выражение для выбора прошлых команд и получать живую обратную связь со списком команд, которые удовлетворяют поиску. Теперь вам не нужно запоминать, какие команды существуют. Позвольте Helm решить эту проблему за вас.
Демо :
helm-eshell-history.gif
Команда:helm-comint-input-ring Аналогично helm-eshell-history, но используется для M-x shell.
( определить-ключ-ключ-режим-карта ( kbd “Cc Cl” ) ‘кольцо-ввода-шлема-коминта ) Команда:helm-mini-buffer-history Вы когда-нибудь чувствовали себя неловко, работая с историей минибуфера, когда она становится большой (скажем, сотни элементов истории)? Если это так, Helm может помочь вам легко управлять большим количеством элементов в списке истории с помощью интерфейса Helm.
( определить-ключ минибуфер-локальная-карта ( kbd “Cc Cl” ) ‘хелм-минибуфер-история ) Упаковка:helm-projectile Автор : Божидар Бацов ,bozhidar@batsov.com
Домашняя страница : GitHub
Особенности :
Предоставьте интерфейс Helm для быстрого выбора файлов в проекте с помощью Projectile.
helm_projectile.gif
Установка :
M-x list-packagesи выберите пакет helm-projectile , затем установите его. После завершения установки вы можете helm-projectile сразу начать использовать.
Использование :
Для базового использования Cc ph для запуска helm-projectileи выбора файлов в вашем проекте. Пожалуйста, обратитесь к полному руководству .
Упаковка:helm-descbinds Автор
2008-2010: Тайки СУГАВАРА,buzz.taiki@gmail.com 2012-2013 Майкл Маркерт,markert.michael@googlemail.com 2013-настоящее время: Дэниел Хакниdan@haxney.org Домашняя страница : GitHub
Особенности : Helm Descbinds предоставляет интерфейс для Emacs describe-bindings, делая активные в данный момент привязки клавиш интерактивными для поиска с помощью helm.
Кроме того, у вас есть следующие действия
Выполните команду Опишите команду Найдите команду Установка :
M-x list-packagesи выберите пакет helm-descbinds , затем установите его. После завершения установки добавьте этот фрагмент кода, чтобы активировать пакет:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ПАКЕТ: руль-дескбиндс ;; ;; ;; ;; ГРУППА: Удобство -> Руль -> Руль Дескбиндс ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ( требуется ’ helm-descbinds ) ( режим helm-descbinds ) Использование :
Введите ключ префикса и Ch после него. Вы увидите список привязок, использующих интерфейс Helm для сужения.
8 Сводка сочетаний клавиш
- Обобщим привязки клавиш.
Комбинация клавиш | Команда | Описание |
---|---|---|
M-x | helm-M-x | Список команд |
M-y | helm-show-kill-ring | Показывает содержимое списка буфера обмена |
C-x b | helm-mini | Показывает открытые буферы, недавно открытые файлы |
C-x C-f | helm-find-files | Helm-версия find-file |
C-s | helm-ff-run-grep | Запустите grep из helm-find-files |
C-c h i | helm-semantic-or-imenu | Интерфейс Helm для семантики/именю |
C-c h m | helm-man-woman | Перейти к любой мужской записи |
C-c h / | helm-find | Интерфейс Helm для поиска |
C-c h l | helm-locate | Интерфейс Helm для поиска |
C-c h o | helm-occur | Интерфейс Helm для события |
C-c h a | helm-apropos | Описывает команды, функции, переменные, … |
C-c h h g | helm-info-gnus | |
C-c h h i | helm-info-at-point | |
C-c h h r | helm-info-emacs | |
C-c h <tab> | helm-lisp-completion-at-point | Предоставляет список доступных функций |
C-c h b | helm-resume | Возобновляет предыдущий сеанс управления |
C-h SPC | helm-all-mark-rings | Просмотр содержимого локальных и глобальных колец меток |
C-c h r | helm-regex | Визуализирует совпадения регулярных выражений |
C-c h x | helm-register | Показывает содержимое регистров |
C-c h t | helm-top | Интерфейс Helm наверх |
C-c h s | helm-surfraw | Интерфейс командной строки для многих поисковых систем |
C-c h g | helm-google-suggest | Интерактивно вводите условия поиска и получайте результаты от Google в буфере управления |
C-c h c | helm-color | Список всех доступных лиц |
C-c h M-: | helm-eval-expression-with-eldoc | Получите мгновенные результаты для выражений Emacs lisp в буфере управления |
C-c h C-, | helm-calcul-expression | Интерфейс Helm для расчета |
C-c C-l | helm-eshell-history | Интерфейс к истории eshell |
C-c C-l | helm-comint-input-ring | Интерфейс к истории оболочки |
C-c C-l | helm-mini-buffer-history | Интерфейс к истории мини-буфера |