Получите Emacs, чтобы объединить линии при уничтожении линий - PullRequest
4 голосов
/ 12 сентября 2010

Когда я нажимаю C-k, Emacs убивает до конца строки. Когда я снова нажимаю C-k, это «убивает перевод строки» и выводит следующую строку. Однако отступ следующей строки остается без изменений, и вы можете получить строку с большим количеством пробелов в середине.

Итак, из этого:

    previous line material
    next line material

к этому:

    previous line material        next line material

Я понимаю, что могу правильно использовать M- ^ для объединения строк, но для этого требуется, чтобы курсор находился на следующей строке. Как мне изменить C-k так, чтобы, когда он убивал символ новой строки, также убивал отступ следующей строки?

Ответы [ 6 ]

4 голосов
/ 12 сентября 2010

Если вы дадите M - ^ аргумент (например, C-u M - ^ ), он присоединит следующую строку к текущей строке.

4 голосов
/ 12 сентября 2010

Для C-k Я не знаю, но вы могли бы использовать функцию just-one-space для преобразования любого количества пробелов в один пробел (он ограничен M-space)

1 голос
/ 12 сентября 2010

Вот способ вставить поведение (я думаю), которое вы хотите в kill-line: при уничтожении новой строки также убивает следующий отступ.Обратите внимание, что это может привести к отсутствию пробела после курсора, поэтому я думаю, что я бы пошел с M-1 M-^ или C-k M-SPC вместо.

(defadvice kill-line (around kill-indentation
                      activate compile)
  "When killing a line break, also kill any subsequent indentation."
  (let ((f-v-l (symbol-function 'forward-visible-line)))
    (flet ((forward-visible-line (arg)
             (funcall f-v-l arg)
             (skip-chars-forward " \t")))
      ad-do-it)))
0 голосов
/ 18 сентября 2010

Я только что понял, что у меня есть это в моих .emacs, это именно то, что вы хотите, хотя я забыл, что у меня это есть, так как я использую pull-line гораздо чаще.Я думаю, что украл это из emacswiki:

(defun kill-and-join-forward (&optional arg)
  "If at end of line, join with following; otherwise kill line.
Deletes whitespace at join."
  (interactive "P")
  (if (and (eolp) (not (bolp)))
      (progn
    (delete-indentation t)
    (if (looking-at " $")
        (delete-char 1)))
    (kill-line arg)))
(global-set-key "\C-k" 'kill-and-join-forward)
0 голосов
/ 18 сентября 2010

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

(defun pull-line ()
  "Pull the next line that contains anything up to the end of this one"
  (interactive)
  (save-excursion
    (end-of-line)
    (while (looking-at "[ \n\r\t]")
      (delete-char 1))
    (if (looking-back "^[[:blank:]]*[[:punct:][:alnum:]].*")
 (fixup-whitespace)
      (indent-according-to-mode))))
(global-set-key "\C-cp" 'pull-line)

Она вытягивает следующую непустую строку до строки this, и, если в строке this есть что-либо, она делает вызовы (fixup-whitespace), что делает правильные вещи в 95% случаев, в противном случае она отступает это то, что Emacs считает правильным уровнем. Я думаю, что я скопировал концепт из Vim?

Я все равно пользуюсь им все время.

0 голосов
/ 12 сентября 2010

Это сделает это:

(defun my-kill-line (&optional arg)
  (interactive "P")
  (if arg
      (kill-line arg)
    (when (prog1 (eolp) (kill-line))
      (just-one-space 1))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...