Emacs. Автодополнение. Helm

Helm — фреймворк автодополнения (completion) и сужения выбора для Emacs.

Содержание

1 Общая информация

  • Репозиторий: https://github.com/emacs-helm/helm.
  • Helm является форком пакета anything.el и может считаться его преемником.

2 Конфигурирование

  • Минимальная конфигурация:
    1(require 'helm-config)
    2(helm-mode 1)
    
  • Расширенная конфигурация:
     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:

    1(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebind tab to do persistent action
    2(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB works in terminal
    3(define-key helm-map (kbd "C-z") 'helm-select-action) ; list actions using C-z
    
  • В сеансе 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 Сводка сочетаний клавиш

  • Обобщим привязки клавиш.
Таблица 1: Сводка сочетаний клавиш Helm
Комбинация клавишКомандаОписание
M-xhelm-M-xСписок команд
M-yhelm-show-kill-ringПоказывает содержимое списка буфера обмена
C-x bhelm-miniПоказывает открытые буферы, недавно открытые файлы
C-x C-fhelm-find-filesHelm-версия find-file
C-shelm-ff-run-grepЗапустите grep из helm-find-files
C-c h ihelm-semantic-or-imenuИнтерфейс Helm для семантики/именю
C-c h mhelm-man-womanПерейти к любой мужской записи
C-c h /helm-findИнтерфейс Helm для поиска
C-c h lhelm-locateИнтерфейс Helm для поиска
C-c h ohelm-occurИнтерфейс Helm для события
C-c h ahelm-aproposОписывает команды, функции, переменные, …
C-c h h ghelm-info-gnus
C-c h h ihelm-info-at-point
C-c h h rhelm-info-emacs
C-c h <tab>helm-lisp-completion-at-pointПредоставляет список доступных функций
C-c h bhelm-resumeВозобновляет предыдущий сеанс управления
C-h SPChelm-all-mark-ringsПросмотр содержимого локальных и глобальных колец меток
C-c h rhelm-regexВизуализирует совпадения регулярных выражений
C-c h xhelm-registerПоказывает содержимое регистров
C-c h thelm-topИнтерфейс Helm наверх
C-c h shelm-surfrawИнтерфейс командной строки для многих поисковых систем
C-c h ghelm-google-suggestИнтерактивно вводите условия поиска и получайте результаты от Google в буфере управления
C-c h chelm-colorСписок всех доступных лиц
C-c h M-:helm-eval-expression-with-eldocПолучите мгновенные результаты для выражений Emacs lisp в буфере управления
C-c h C-,helm-calcul-expressionИнтерфейс Helm для расчета
C-c C-lhelm-eshell-historyИнтерфейс к истории eshell
C-c C-lhelm-comint-input-ringИнтерфейс к истории оболочки
C-c C-lhelm-mini-buffer-historyИнтерфейс к истории мини-буфера

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие