# Как в Emacs двигать слова
Anotheroneuser(syscall,27) — All
2018-08-20 14:58:58


Может быть, кто-то сталкивался с этим.
Ничего не нашёл, кроме -- менять слова местами по M-t
Бывают проблемы с лексикой и надо переместить слово в в другой конец предложения. Может быть, есть для этого удобное сокращение?

# Re: Как в Emacs двигать слова
Difrex(tavern,23) — Anotheroneuser
2018-08-20 15:20:56


Anotheroneuser> Бывают проблемы с лексикой и надо переместить слово в в другой конец предложения. Может быть, есть для этого удобное сокращение?

У меня есть код, который умеет двигать блок текста, как во всяких саблаймах
(defun setup-move-code-block ()
    "Enable code moving like as Sublime."
    (defun move-text-internal (arg)
        (cond
         ((and mark-active transient-mark-mode)
          (if (> (point) (mark))
                  (exchange-point-and-mark))
          (let ((column (current-column))
                (text (delete-and-extract-region (point) (mark))))
              (forward-line arg)
              (move-to-column column t)
              (set-mark (point))
              (insert text)
              (exchange-point-and-mark)
              (setq deactivate-mark nil)))
         (t
          (beginning-of-line)
          (when (or (> arg 0) (not (bobp)))
              (forward-line)
              (when (or (< arg 0) (not (eobp)))
                  (transpose-lines arg))
              (forward-line -1)))))

    (defun move-text-down (arg)
        "Move region (transient-mark-mode active) or current line
  arg lines down."
        (interactive "*p")
        (move-text-internal arg))

    (defun move-text-up (arg)
        "Move region (transient-mark-mode active) or current line
  arg lines up."
        (interactive "*p")
        (move-text-internal (- arg)))

    (global-set-key [\M-\S-up] 'move-text-up)
    (global-set-key [\M-\S-down] 'move-text-down))

Думаю, что можно сделать по-аналогии, как тебе нужно. Но ваще для переноса слова я пользуюсь C-w C-y :)

// Sent from my GNU Emacs

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — Difrex
2018-08-20 15:53:37


> C-w C-y
Нажал по неопытности -- херак! -- полтекста исчезло. Слава Богу, помнил C-x u
Потом вспомнил, что это просто копировать-вставить.

Ничего не понимая, естественно, кроме отдельных английских слов, попробовал читать конфиг.
Вот просто ради интереса: там везде говорится up и down, но нигде не сказано right и left )
В right и в left слова можно двигать? Sublime не пользовался -- у меня к нему сразу возникло какое-то странное чувство... Решил не трогать.

# Re: Как в Emacs двигать слова
Difrex(tavern,23) — Anotheroneuser
2018-08-20 16:20:32


Anotheroneuser> Нажал по неопытности -- херак! -- полтекста исчезло. Слава Богу, помнил C-x u
Anotheroneuser> Потом вспомнил, что это просто копировать-вставить.
Извини, надо было рассказать что это просто копипаст.

Anotheroneuser> Вот просто ради интереса: там везде говорится up и down, но нигде не сказано right и left )
Anotheroneuser> В right и в left слова можно двигать?
Ну, мне не надо было никогда двигать вправо и влево. Но написать можно :). Попробую что-то написать похожее.
Тебе же как-то так слова двигать нужно?
            Before C-S-right

           +----------+           +----------+         +----------+
           | word A   |           | word B   |         | word C   |
           |          +-----+-----+          +---------+          |
           +----------+     |     +----------+         +----------+
                            |
                            |
                            |
            After C-S-right |
                            |
           +----------+     |     +----------+         +----------+
           | word B   |     |     | word A   |         | word C   |
           |          +-----+-----+          +---------+          |
           +----------+           +----------+         +----------+

// Sent from my GNU Emacs

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — Difrex
2018-08-20 17:00:13


> Извини
Да я ничего )) Если всё правильно понимаю, в Emacs есть собственный морг убитых слов, откуда он, в случае чего, может их доставать. Единственно, пару раз я этот как-то морг уничтожал и после этого уже ничего нельзя было сделать.

> написать можно
офигеть.. неужели и я когда-нибудь так скажу..
Теперь, когда ты спросил, мне захотелось подумать, как же действительно надо сдвигать слова и надо ли..

Фраза: Ни двора ни кола.
Действие: Сдвинуть "кола" влево
Фраза: Ни двора кола ни.
Действие: Сдвинуть "кола" влево
Фраза: Ни кола двора ни.
Действие: Сдвинуть "двора" вправо
Фраза: Ни кола ни двора.

Вот так. Но это -- блажь, подозреваю... Или нет?

# Re: Как в Emacs двигать слова
btimofeev(tavern,13) — Anotheroneuser
2018-08-20 17:47:18


Anotheroneuser> Ничего не нашёл, кроме -- менять слова местами по M-t

А чем оно тебе не подходит? Судя по справке это то, что тебе и нужно. К примеру C-u 4 M-t передвинет слово вперёд через 4 слова, C-u - 4 M-t назад через 4 слова. Правда довольно объемный кейбиндинг выходит, возможно можно как-то переопределить покороче.

# Re: Как в Emacs двигать слова
Difrex(tavern,23) — Anotheroneuser
2018-08-20 18:51:58


Да не, оно довольно просто должно быть. Все функции уже есть в стоковом Емаксе.
Ща ноут у жены отберу и попробую накидать :)

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — btimofeev
2018-08-20 18:50:41


А-а!
> C-u 4 M-t
а я просто М-t..
Попробую - спасибо.

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — Difrex
2018-08-20 18:54:25


> Ща ноут у жены отберу и попробую накидать :)
Слушай, может не стоит так рисковать?? Фиг с ним. Выйдем из положения))

# Re: Как в Emacs двигать слова
Difrex(tavern,23) — Anotheroneuser
2018-08-20 19:03:55


Anotheroneuser> > Ща ноут у жены отберу и попробую накидать :)
Anotheroneuser> Слушай, может не стоит так рисковать?? Фиг с ним. Выйдем из положения))
Да все ок, у нее и свой есть =)
Лови
(defun setup-move-words ()
    "Move word right or left."

    (defun move-word-right (arg)
        "Move word to right."
        (interactive "*p")
        (transpose-words 1))

    (defun move-word-left (arg)
        "Move word to left."
        (interactive "*p")
        (transpose-words -1))

    (global-set-key [\C-\S-right] 'move-word-right)
    (global-set-key [\C-\S-left] 'move-word-left))

(setup-move-words)

По ctrl+shift+стрелка вправо двигаем слово на право, со стрелкой влево - влево =)

// Sent from my GNU Emacs

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — btimofeev
2018-08-20 21:31:48


Да, правда! Работает.
> довольно объемный кейбиндинг
это тоже правда. Но привыкнуть можно.

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — Difrex
2018-08-20 21:43:52


Работает! ) Только пока не до конца понятно.
Вот какое выходит кино:
https://yadi.sk/i/1fvUwhTP3aQWzM

# Re: Как в Emacs двигать слова
btimofeev(tavern,13) — Anotheroneuser
2018-08-20 22:36:11


Anotheroneuser> Работает! ) Только пока не до конца понятно.
Anotheroneuser> Вот какое выходит кино:
Anotheroneuser> https://yadi.sk/i/1fvUwhTP3aQWzM

Да, берет предыдущее слово (до курсора) и меняет его со следующим (после курсора), после чего передвигает курсор через слово вперёд. Как-то так.

# Re: Как в Emacs двигать слова
Difrex(tavern,23) — Anotheroneuser
2018-08-20 22:38:32


Короче, там курсор в конец нужного тебе слова надо ставить. Если ставишь в начало, то берет предыдущее. Так transpose-word работает, судя по доке.

# Re: Как в Emacs двигать слова
Andrew Lobanov(tavern,1) — btimofeev
2018-08-21 04:52:36


Anotheroneuser>> Ничего не нашёл, кроме -- менять слова местами по M-t
btimofeev> А чем оно тебе не подходит? Судя по справке это то, что тебе и нужно. К примеру C-u 4 M-t передвинет слово вперёд через 4 слова, C-u - 4 M-t назад через 4 слова. Правда довольно объемный кейбиндинг выходит, возможно можно как-то переопределить покороче.

Раскопать какую функцию оно вызывает и как да написать биндинг. Или, если там не одной функцией всё делается, написать свою функцию и прилепить кейбиндинг. Надо посмотреть что да как там.

# Re: Как в Emacs двигать слова
Andrew Lobanov(tavern,1) — Difrex
2018-08-21 04:53:26


Difrex> ====
Difrex> (defun setup-move-words ()
Difrex> "Move word right or left."

Difrex> (defun move-word-right (arg)
Difrex> "Move word to right."
Difrex> (interactive "*p")
Difrex> (transpose-words 1))

Difrex> (defun move-word-left (arg)
Difrex> "Move word to left."
Difrex> (interactive "*p")
Difrex> (transpose-words -1))

Difrex> (global-set-key [\C-\S-right] 'move-word-right)
Difrex> (global-set-key [\C-\S-left] 'move-word-left))

Difrex> (setup-move-words)
Difrex> ====
Difrex> По ctrl+shift+стрелка вправо двигаем слово на право, со стрелкой влево - влево =)

Всё оказалось даже проще, чем я думал =)

Emacs мощен, блин.

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — Difrex
2018-08-21 05:42:11


О! Теперь понял, благодарю.

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — btimofeev
2018-08-21 05:47:46


Хитрó..
То есть, так?

А из нашего окна площад[]ь Красная видна!

двигаем вправо

А из нашего площад[]ь окна Красная видна!

# Re: Как в Emacs двигать слова
Anotheroneuser(syscall,27) — Anotheroneuser
2018-08-21 05:48:54


поспешил..

А из нашего окна площад[]ь Красная видна!

двигаем вправо

А из нашего площадь окна Красн[]ая видна!