emacs: изменить регистр прямоугольника

#emacs

#emacs

Вопрос:

Какой был бы самый простой способ изменить регистр прямоугольника?

Ни в одном из сокращений, упомянутых в руководстве, об этом не говорится. Должен ли я добавлять пользовательскую привязку для этого? И пока мы этим занимаемся, как мне выполнить поиск только внутри прямоугольника?

Ответ №1:

Вот реализация upcase-rectangle , которая изменяет регистр на все заглавные. Просто замените upcase на downcase или capitalize или любое другое пользовательское преобразование регистра, которое вы хотите:

 (defun upcase-rectangle (b e)
  "change chars in rectangle to uppercase"
  (interactive "r")
  (apply-on-rectangle 'upcase-rectangle-line b e))

(defun upcase-rectangle-line (startcol endcol)
  (when (= (move-to-column startcol) startcol)
    (upcase-region (point)
                   (progn (move-to-column endcol 'coerce)
                          (point)))))
  

Ответ №2:

Это просто с помощью cua-mode поддержки выбора прямоугольника:

 (setq cua-enable-cua-keys nil)  ; enable only CUA's rectangle selections
(cua-mode t)
  

Затем вы можете выделять прямоугольники, нажимая C-RET и перемещая курсор. Чтобы изменить регистр этой области, просто используйте обычную upcase-region команду, привязанную к M-U по умолчанию.

Комментарии:

1. Да и нет. Нет, потому что upcase-region не работает с прямоугольниками и M-u является upcase-word по умолчанию ( upcase-region привязан к C-x C-u ). Да, потому что, когда выбран прямоугольник, CUA привязывается M-u к cua-upcase-rectangle , что, что неудивительно, прекрасно работает. Вы также можете использовать (cua-selection-mode t) вместо приведенного кода.

2. Спасибо за разъяснение, Фил, и подсказку о cua-selection-mode !

3. Спасибо за комментарий и разъяснения. Но я нахожу это немного запутанным (?!), что некоторые полезные вещи недоступны из коробки с другими командами rect.

4. Согласен; Я предполагаю, что стандартная C-x r поддержка прямоугольников довольно ограничена. Я никогда не использовал это лично.