Emacs отступ / не отступ текущей строки - PullRequest
2 голосов
/ 14 марта 2012

Я давно пользуюсь Emacs, и мне очень не хватает старого доброго ярлыка Geany - "C-i" и "C-u".

«C-i» отступает всю текущую строку (удерживая курсор мыши там, где она есть), а «C-u» отступает всю текущую строку.

Я нашел много команд отступа для Emacs, некоторые для отступа региона. По сути, мне нужны Vim ">>" и "<<", но курсор мыши остается там, где он есть. </p>

Однако мое главное сомнение в том, что я могу сделать отступ только для текущей строки.

Есть идеи? Заранее спасибо!

EDIT Tab добавляет два пробела, я хочу быть в любой позиции в строке и добавить два пробела в начале строки, или удалить два пробела в начале строки.

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Это поведение по умолчанию для моего ключа TAB в emacs, который запускает команду indent-for-tab-command. С одной из страниц документации :

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

Также стоит отметить переменную tab-always-indent:

Переменная tab-всегда-отступ настраивает поведение команды (indent-for-tab-command). Значение по умолчанию t задает поведение, описанное выше. Если вы измените значение на символ завершения, то сначала попытается сделать отступ для текущей строки, а если строка уже имеет отступ, он попытается завершить текст в точке (см. Завершение символа). Если значение равно nil, то отступает текущая строка, только если точка находится на левом поле или в отступе строки; в противном случае он вставляет настоящий символ табуляции.
0 голосов
/ 01 июля 2018

У меня есть это в моем init.el:

(defun rofrol/indent-region(numSpaces)
    (progn 
        ; default to start and end of current line
        (setq regionStart (line-beginning-position))
        (setq regionEnd (line-end-position))

        ; if there's a selection, use that instead of the current line
        (when (use-region-p)
            (setq regionStart (region-beginning))
            (setq regionEnd (region-end))
        )

        (save-excursion ; restore the position afterwards            
            (goto-char regionStart) ; go to the start of region
            (setq start (line-beginning-position)) ; save the start of the line
            (goto-char regionEnd) ; go to the end of region
            (setq end (line-end-position)) ; save the end of the line

            (indent-rigidly start end numSpaces) ; indent between start and end
            (setq deactivate-mark nil) ; restore the selected region
        )
    )
)

(defun rofrol/indent-lines(&optional N)
    (interactive "p")
    (indent-rigidly (line-beginning-position)
                    (line-end-position)
                    (* (or N 1) tab-width)))

(defun rofrol/untab-region (&optional N)
    (interactive "p")
    (rofrol/indent-region (* (* (or N 1) tab-width)-1)))

(defun  rofrol/tab-region (N)
    (interactive "p")
    (if (use-region-p)
        (rofrol/indent-region (* (or N 1) tab-width)) ; region was selected, call indent-region
        (rofrol/indent-lines N); else insert spaces as expected
    ))

(global-set-key (kbd "C->") 'rofrol/tab-region)
(global-set-key (kbd "C-<") 'rofrol/untab-region)
...