суббота, 5 апреля 2008 г.

Emacs + выделение шифтом и стрелками

Так, чисто чтоб не потерять команду, запишу сюда (для того этот блог изначально и был, впринципе, создан).

[зачеркнуто]
Чтоб выелять текст зажав shift и двигая стрелочки надо в емаксе сделать
M-x pc-selection-mode

Шифт и стрелочки - гораздо быстрее мышки.
[/зачеркнуто]

[еще раз рачеркнуто]
Еще раз подтвердилась старая английская поговорка: "из двух зол не выбирают ни одного". Нашлось "золотое решение" чтоб перемещаться привычным образом и начинать выделение клавишами Ctrl+пробел:
M-x transient-mark-mode
[/еще раз зачеркнуто]

Нашлось еще более золотое решение. Для визуального выделения надо просто два раза нажать
Ctrl+Space

4 комментария:

Павел Вязовой комментирует...

а чем стандартные способы непонравились?
Я включаю transcient-mark-mode (както так, если че вечером точнее посмотрю и напишу комманду), затем C-spc начинает выделение и все. И держать шифт ненадо.

Почему шифт не катит - а как ты с заажтым шифтом будеш пользоваться C-s и C-r? или закладкой например? Или менять местами начало и конец выделения. Все эти фишки делают работу в емакс клевой, а режимы совместимости с примитивными редакторами сводят фишки на нет.

Я потом как сяду за емакс подробней тебе напишу, просто то что у меня забиндено на хоткеи - забыл как комманды сами называются. Щас даже закрывать небуду эту страничку, поехал ремонт у сестры делать как приеду отпишусь.

kost BebiX комментирует...

@Vyazovoi Pavel
Спасибо огромное! Правлю пост свой, теперь все по-человечески!
transient-mark-mode, почти угадали :-)

Павел Вязовой комментирует...

без transient-mark-mode C-spc тоже ставит метку. Метки позволяют выделить регион. transient режим просто включает визуальное отображение того региона который помечен метками.

Можно пойти ещё дальше - у меня transient режим выключен. Он тоже выделяет регион - но не отмечает это визуально, а если надо визуально - то два раза C-spc. Например есть отличная комманда exchange-point-and-mark (по дефолту C-x C-x) - чтобы понять что она делает можно просто воспользоваться при включенном transient-mark-mode, тогда это будет видно визуально. Так вот без transient она позволяет нетолько поменять местами точки при выделении но и просто перемещаться местами между двумя точками. Хотя если нравится transient режим по дефолту то вышесказанное легко заменяется букмарками, у меня есть вот такой код:

;;Save current position to register 0
(defun save-point-only ()
"Save current point to register 0"
(interactive)
(set-register 0 (point-marker)))

;;Toggle between saved positions as in MIM editor
(defun save-point-and-switch ()
"Save current point to register 0 and go
to the previously saved position"
(interactive)
(let (temp)
(setq temp (point-marker))
(when (not (equal (get-register 0) nil))
(jump-to-register 0))
(set-register 0 temp)))

Первая функция запоминает текущее положение курсора в нулевой регистр, а вторая запоминает и переключается на предыдущее положение, т.е. можно скакать между двумя точками или просто запомнить точку, на которую потом надо вернуться. Емакс велик, все кто говорят что это устарело, для гиков, или избыточно - просто не осилили весь его функционал, по окну редактирования не судят - возможностей действительно куча.

kost BebiX комментирует...

@Vyazovoi Pavel
дада, про это все в туториале написано и я не против того, что он ничего визуально не выделяет. Просто дело в том, что я читал о python-mode, и там, чтоб закомментить блок - его надо выделить, а потом нажать M-;. А выделить, как я понял, надо именно визуально.

А вот за "два раза Ctrl+Space" спасибо :-) Это то что надо.