Вопрос или проблема
Почему в Emacs я не могу вставить текст C-y в поле поиска C-s?
Следуйте этой схеме:
-
Esc-W // Скопировать выделенный текст в буфер
-
Ctrl-s Затем нажмите Enter.
- Ctrl-y Затем нажмите Enter. // Вставить выделенный текст
Затем повторите Ctrl-s для инкрементного поиска. Аналогично для декрементного поиска используйте Ctrl-r.
Команда, которую вы ищете, это isearch-yank-kill
, которая назначена на M-y во время isearch.
M-y выполняет команду
isearch-yank-kill, которая является
интерактивной скомпилированной Lisp-функцией в
`isearch.el`.(isearch-yank-kill)
Вытянуть строку из кольца удаления в строку поиска.
Начиная с Emacs 24.1, вы можете.
C-y в Isearch теперь назначен на
isearch-yank-kill
, вместо
isearch-yank-line
.
Точно так же, как сказал @kjfletch, вы можете использовать isearch-yank-kill
(по умолчанию назначен на M-y
для меня) для вставки в поле поиска isearch.
Однако я заметил одну раздражающую проблему с этим – когда я нажимал Backspace после вставки, он удалял всю вставленную строку вместо того, чтобы просто удалить последний символ! Поэтому редактировать вставленную строку было невозможно.
Я нашел решение – переназначить <backspace>
с isearch-delete-char
на isearch-del-char
, который удаляет только последний символ из входной строки, а не отменяет последний введенный элемент.
(define-key isearch-mode-map (kbd "<backspace>") 'isearch-del-char)
Ответ или решение
Вопрос: Почему я не могу вставить текст в поле поиска C-s в Emacs с помощью C-y?
Ответ:
В Emacs действительно существует особенность, касающаяся вставки текста в панель поиска (isearch) с помощью горячих клавиш, и давайте детализируем это:
-
Стандартные комбинации клавиш:
- В Emacs изначально для вставки содержимого из буфера обмена используется комбинация клавиш
C-y
. Однако, в момент, когда вы находитесь в режиме интерактивного поиска (isearch), данная комбинация не будет работать как ожидается. В этом режимеC-y
по умолчанию связано с другой функцией, которая не переносит текст из буфера обмена в строку поиска.
- В Emacs изначально для вставки содержимого из буфера обмена используется комбинация клавиш
-
Замена поведения с помощью isearch-yank-kill:
- В версии Emacs 24.1 произошли изменения, которые изменили поведение комбинации
C-y
. Теперь в режиме поиска это сочетание клавиш связано с командойisearch-yank-kill
, которая позволяет вставлять текст из истории буфера (kill ring) в строку поиска. Это означает, что вам необходимо использовать комбинацию клавишM-y
для вставки текста.
- В версии Emacs 24.1 произошли изменения, которые изменили поведение комбинации
-
Проблемы редактирования после вставки:
-
Во время работы с вставленным текстом может возникнуть проблема с использованием клавиши Backspace. По умолчанию эта клавиша удаляет все введенное с последней вставки. Это может привести к неудобствам, особенно если вы хотите просто удалить последний символ. Для улучшения этой функции вы можете переназначить
Backspace
, чтобы она работала более интуитивно. Например:(define-key isearch-mode-map (kbd "<backspace>") 'isearch-del-char)
Это позволит вам удалять только последний символ вместо отмены последнего введенного элемента.
-
-
Как правильно использовать команды:
- Чтобы скопировать текст и затем вставить его в строку поиска Emacs, выполните следующие шаги:
- Используйте
Esc-W
для копирования выделенного текста в буфер. - Активируйте поиск с помощью
C-s
и нажмитеReturn
. - Для вставки текста используйте
M-y
, а неC-y
. - Если необходимо, исправьте вставленный текст, используя
Backspace
, который можно переопределить для удаления только одного символа.
- Используйте
- Чтобы скопировать текст и затем вставить его в строку поиска Emacs, выполните следующие шаги:
Эти рекомендации и изменения помогут вам более эффективно работать с текстом в Emacs, особенно в режиме поиска, и значительно улучшат ваш опыт работы с этой мощной средой разработки. Если у вас возникли дополнительные вопросы или вам требуется уточнение по какому-либо из шагов, не стесняйтесь обращаться за помощью.