LINUX.ORG.RU

Emacs-mode: перейти в конец предыдущего слова (аналог ge в VIM)

 , , ,


0

1

В bash часто хочется перейти в конец предыдущего слова, не переводя bash в режим эмуляции vi (там это делается командой ge). Есть способ это сделать?

★★★★★

Последнее исправление: Harliff (всего исправлений: 2)

Ответ на: комментарий от bryak

Это все что есть http://wiki.opennet.ru/Bash

Не дезинформируй людей. Не увидел ни одной комбинации с alt, хотя каждый день ими пользуюсь.

По сабжу — man readline, может там что найдешь. Я обычно пользуюсь M-f и M-b, но это не совсем то, так как перемещение происходит по началу слов.

Deleted
()
Ответ на: комментарий от Deleted

Вопрос: а в Имаксе это самое аналог ge есть ? Скорее нет, чем да. Будет ли это в readline ? Скорее нет, чем да.

bryak ★★★★
()

bash, emacs, vim

Главный-то тэг забыли — [readline].

перейти в конец предыдущего слова, не переводя bash в режим эмуляции vi (там это делается командой ge)

У меня, кстати, нет такого.

Есть способ это сделать?

Способ добиться чего бы то ни было от свободной программы есть всегда.

А здесь, если все так, это еще и не очень сложно: берете и назначаете ту команду, что назначена в vi-command на последовательность ge, на что-нибудь в emacs.

$ bind -p
Zmicier ★★★★★
()
Ответ на: комментарий от Deleted

По сабжу — man readline, может там что найдешь.

Там очень много интересного, но готовой команды для перехода в конец предыдущего слова я там не нашел.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Zmicier

Главный-то тэг забыли — [readline].

Спасибо, добавил.

А здесь, если все так, это еще и не очень сложно: берете и назначаете ту команду, что назначена в vi-command на последовательность ge, на что-нибудь в emacs.

bind -p

Спасибо, буду думать!

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

Спасибо, буду думать!

Да не за что. Потом сообщите, что́ там было, если не сложно. А то мне даже интересно, почему у меня этого нет.

Но куда более интересно, оно вам зачем? Зачем вообще, то есть для чего нужно ставить курсор на конец прошлого слова? И зачем вы ищете атомарную команду, то есть чем плоха M-b M-b M-f?

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

Внимательней почитал man readline. На комбинацию «ge» в vim-режиме ничего не забиндено.

Что-ж, потребность не очень велика - пока не буду заниматься исследованиями. В основной системе и серверах используется zsh, там «ge» есть «из коробки»), а bash используется на маршрутизаторах (VyOS) — там можно и потерпеть.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Zmicier

И зачем вы ищете атомарную команду, то есть чем плоха M-b M-b M-f?

А если вы ищете не атомарную команду, а спобос назначить сие на один аккорд, то Ридлайн же макросы умеет:

"\es": "\eb\eb\ef"
Zmicier ★★★★★
()
Ответ на: комментарий от bryak

Вопрос: а в Имаксе это самое аналог ge есть ? Скорее нет, чем да.

(defun backward-word-end ()
	 (interactive)
	 (backward-word)
	 (backward-char)
	 (backward-char))

Будет ли это в readline ? Скорее нет, чем да.

bind '"\ev":"\eb\C-b\C-b"'

На M-v теперь аналог ge.

Deleted
()
Ответ на: комментарий от Zmicier

Но куда более интересно, оно вам зачем? Зачем вообще, то есть для чего нужно ставить курсор на конец прошлого слова? И зачем вы ищете атомарную команду, то есть чем плоха M-b M-f?

На маршрутизаторах (VyOS) часто приходится выполнять однотипные команды, отличающиеся последним символом в IP-адресе или в имени интерфейса. Я делаю это либо редактирую строку из истории, либо строку из буфера обмена.

По хорошему, нужно приучиться прыгать к следующему слову и переходить на два символа назад (M-f C-b C-b), но я, в основном, на автомате двигаюсь с начала слова до его конца.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Zmicier

Но это же совершенно неверно.

(defun backward-word-end ()
	 (interactive)
	 (backward-word)
	 (backward-word)
	 (forward-word)
	 (backward-char))

Так лучше, забыл про то, что не везде один пробел между словами.

Для bind аналогично:

bind '"\ev":"\eb\eb\ef\C-b"'

Deleted
()
Ответ на: комментарий от Deleted
bind '"\ev":"\eb\eb\ef\C-b"'

На M-v теперь аналог ge.

Ух ты, пропустил самое интересное. Это решение работает!

jollheef, спасибо!

Harliff ★★★★★
() автор топика
Последнее исправление: Harliff (всего исправлений: 2)
Ответ на: комментарий от Deleted

Изначально этого нет не в Имаксе, ни в redline. Верно ? А биндами да, можно это добавить. И функцией в Имакс, что собственно говоря вы и продемонстрировали. Вопросы ко мне ?

bryak ★★★★
()
Ответ на: комментарий от Harliff

Хочется немного усовершенствовать биндинг: сделать, что бы переход осуществлялся по словам, разделенным пробелом (аналог gE в vim). Нужно, например, для быстрого «перепрыгивания» через IP-адрес (не останавливаясь на каждой точке в адресе).

Если делать в несколько команд, то это (очень грубо):

bind '"\eq": vi-bword'
bind '"\ee": vi-eword'
bind '"\ev":"\eq\eq\ee"'

Есть способ сделать это в одну команду? Вот это, например, не срабатывает (отрабатывается только первая команда («vi-bword»):

bind '"\ev": vi-bword vi-bword vi-eword'

Кстати, man readline не содержит информации по «bword» (оно же bigword, как я понял, например «vi-end-bigword»). Случайно наткнулся на такую функцию в выводе команды

bind -p

Harliff ★★★★★
() автор топика
Последнее исправление: Harliff (всего исправлений: 4)
Ответ на: комментарий от bryak

А биндами да, можно это добавить.

И действительно, можно. В этом вся суть — хочется чего-то — добавил в пару кликов. А не в том, что у тебя что-то есть изначально.

Deleted
()
Ответ на: комментарий от Harliff

Есть способ сделать это в одну команду?

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

Deleted
()
Ответ на: комментарий от Deleted

Я думаю, что костыль в данном случае проблемы не составляет.

Именно так!

Всем спасибо за помощь!

Harliff ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.