Python не предоставляет многоплатформенное решение из коробки. Если вы находитесь в Windows, вы можете попробовать msvcrt с помощью:
import msvcrt
print 'Press s or n to continue:\n'
input_char = msvcrt.getch()
if input_char.upper() == 'S':
print 'YES'
Я использую
C-a C-SPACE C-n M-w C-y
, который ломается к [1 130]
C-a
: переместите курсор для запуска строки C-SPACE
: начните выбор ("метка набора") C-n
: переместите курсор в следующую строку M-w
: регион копии C-y
: вставка ("рывок") вышеупомянутое
C-a C-k C-k C-y C-y
суммы к тому же самому (TMTOWTDI)
C-a
: переместите курсор для запуска строки C-k
: сокращение ("уничтожает") строку C-k
: сократите новую строку C-y
: вставка ("рывок") (мы вернулись в самое начало) C-y
: вставьте снова (теперь, у нас есть две копии строки) , Они являются оба смущающе подробными по сравнению с [1 113] в Вашем редакторе, но в Emacs всегда существует настройка. C-d
связывается с [1 115] по умолчанию, таким образом, как насчет [1 116]? Просто добавьте следующее к Вашему .emacs
:
(global-set-key "\C-c\C-d" "\C-a\C- \C-n\M-w\C-y")
(elisp версия @Nathan, вероятно, предпочтительна, потому что она не повредится, если какая-либо из привязок клавиш будет изменена.)
Остерегайтесь: некоторые режимы Emacs могут исправить C-c C-d
, чтобы сделать что-то еще.
Я имею copy-from-above-command
связанный с ключом и использованием это. Этому предоставляют XEmacs, но я не знаю о GNU Emacs.
'copy-from-above-command' является интерактивной скомпилированной функцией Lisp
- загруженный из "/usr/share/xemacs/21.4.15/lisp/misc.elc" (copy-from-above-command & дополнительный АРГУМЕНТ)Документация: символы Copy от предыдущей непустой строки , начиная чуть выше точки. Символы ARG копии, но не мимо конца той строки. Если никакой данный аргумент, не скопируйте весь отдых строки. Скопированные символы вставляются в буфер перед точкой.
хорошо я обычно использовал:
Ctl-Space (set the mark) move to end of line Ctl-K kill line Ctl-Y * 2 (yank the line back)
может быть намного лучший путь хотя: P
ctrl - k , ctrl - k , (положение к новому местоположению) ctrl - y
Добавляют ctrl - , если Вы не запускаете в начале строки. И 2-е ctrl - k должно захватить символ новой строки. Это может быть удалено, если Вы просто хотите текст.
В дополнение к предыдущим ответам можно также определить собственную функцию для дублирования строки. Например, помещение следующего в Вашем .emacs файле заставит C-d копировать текущую строку.
(defun duplicate-line()
(interactive)
(move-beginning-of-line 1)
(kill-line)
(yank)
(open-line 1)
(next-line 1)
(yank)
)
(global-set-key (kbd "C-d") 'duplicate-line)
[Kevin Conner]: Достаточно близкий, насколько я знаю. Единственная другая вещь рассмотреть включает kill-whole-line
для включения новой строки в C-k.
Установите курсор на строку, если не вначале делают CTRL - , то:
CTRL - K
CTRL - K
CTRL - Y
CTRL - Y
потому что я не знаю, я запущу эту партию в гольф с slowball:
ctrl-k, y, y
Дополнение Nathan к Вашему .emacs файлу является способом пойти, но это могло быть упрощено немного путем замены
(open-line 1)
(next-line 1)
с
(newline)
получение
(defun duplicate-line()
(interactive)
(move-beginning-of-line 1)
(kill-line)
(yank)
(newline)
(yank)
)
(global-set-key (kbd "C-d") 'duplicate-line)
что-то, что Вы могли бы хотеть иметь в своем .emacs,
(setq kill-whole-line t)
, Который в основном уничтожает всю строку плюс новая строка каждый раз, когда Вы вызываете уничтожать-строку (т.е. через C-k). Затем без дополнительного кода, можно просто сделать C-a C-k C-y C-y для дублирования строки. Это ломается к
C-a go to beginning of line
C-k kill-line (i.e. cut the line into clipboard)
C-y yank (i.e. paste); the first time you get the killed line back;
second time gives the duplicated line.
, Но если Вы используете это часто затем, возможно, специализированная привязка клавиш могла бы быть лучшей идеей, но преимущество просто использования C-a C-k C-y C-y является Вами, может копировать строку в другом месте, вместо чуть ниже текущей строки.
Значения по умолчанию для этого ужасны. Однако вы можете расширить Emacs, чтобы он работал как SlickEdit и TextMate, то есть копировать / вырезать текущую строку, когда текст не выбран:
(transient-mark-mode t)
(defadvice kill-ring-save (before slick-copy activate compile)
"When called interactively with no active region, copy a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(message "Copied line")
(list (line-beginning-position)
(line-beginning-position 2)))))
(defadvice kill-region (before slick-cut activate compile)
"When called interactively with no active region, kill a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
Поместите вышеуказанное в .emacs
. Затем, чтобы скопировать строку, Mw
. Чтобы удалить строку, Cw
. Чтобы дублировать строку, Ca Mw Cy Cy Cy ...
.
Я не совсем помню, как дублирование строк работает где-либо еще, но как бывший пользователь SciTE мне понравилось одно в SciTE-way: он не касается положения курсора! Так что все вышеперечисленные рецепты были мне недостаточно хороши, вот моя хиппи-версия:
(defun duplicate-line ()
"Clone line at cursor, leaving the latter intact."
(interactive)
(save-excursion
(let ((kill-read-only-ok t) deactivate-mark)
(toggle-read-only 1)
(kill-whole-line)
(toggle-read-only 0)
(yank))))
Обратите внимание, что на самом деле ничего не убивается в процессе, оставляя отметки и текущий выбор нетронутыми.
Кстати, почему вы так любите подергивания курсор вокруг, когда есть эта приятная штука, убивающая целую строку (CS-backspace)?
Моя версия функции для дублирования строки, которая хорошо работает с отменой и не влияет на положение курсора. Это результат обсуждения в gnu.emacs.sources от ноября 1997 г. .
(defun duplicate-line (arg)
"Duplicate current line, leaving point in lower line."
(interactive "*p")
;; save the point for undo
(setq buffer-undo-list (cons (point) buffer-undo-list))
;; local variables for start and end of line
(let ((bol (save-excursion (beginning-of-line) (point)))
eol)
(save-excursion
;; don't use forward-line for this, because you would have
;; to check whether you are at the end of the buffer
(end-of-line)
(setq eol (point))
;; store the line and disable the recording of undo information
(let ((line (buffer-substring bol eol))
(buffer-undo-list t)
(count arg))
;; insert the line arg times
(while (> count 0)
(newline) ;; because there is no newline in 'line'
(insert line)
(setq count (1- count)))
)
;; create the undo information
(setq buffer-undo-list (cons (cons eol (point)) buffer-undo-list)))
) ; end-of-let
;; put the point in the lowest line and return
(next-line arg))
Затем вы можете определить CTRL-D для вызова этой функции:
(global-set-key (kbd "C-d") 'duplicate-line)
«Я написал свою собственную версию duplicate-line
, потому что я не хочу облажаться.
(defun jr-duplicate-line ()
"EASY"
(interactive)
(save-excursion
(let ((line-text (buffer-substring-no-properties
(line-beginning-position)
(line-end-position))))
(move-end-of-line 1)
(newline)
(insert line-text))))
(global-set-key "\C-cd" 'jr-duplicate-line)
Вместо kill-line
( Ck
), как в Ca
Ck
Ck
Cy
Cy
, используйте kill-all-line
команда:
C-S-Backspace
C-y
C-y
Преимущества перед Ck
заключаются в том, что не имеет значения, где находится точка в строке (в отличие от Ck
, который требует наличия в начале строки), а также уничтожает новую строку (опять же, что-то Ck
не работает).
Мне понравилась версия FraGGod, за исключением двух вещей: (1) она не проверяет, является ли буфер уже доступным только для чтения с помощью (интерактивный "*")
, и (2) он не работает. последняя строка буфера, если эта последняя строка пуста (так как вы не можете уничтожить строку в этом случае), оставляя ваш буфер доступным только для чтения.
Я внес следующие изменения, чтобы решить эту проблему:
(defun duplicate-line ()
"Clone line at cursor, leaving the latter intact."
(interactive "*")
(save-excursion
;; The last line of the buffer cannot be killed
;; if it is empty. Instead, simply add a new line.
(if (and (eobp) (bolp))
(newline)
;; Otherwise kill the whole line, and yank it back.
(let ((kill-read-only-ok t)
deactivate-mark)
(toggle-read-only 1)
(kill-whole-line)
(toggle-read-only 0)
(yank)))))
С аргументами префикса и (я надеюсь) интуитивным поведением:
(defun duplicate-line (&optional arg)
"Duplicate it. With prefix ARG, duplicate ARG times."
(interactive "p")
(next-line
(save-excursion
(let ((beg (line-beginning-position))
(end (line-end-position)))
(copy-region-as-kill beg end)
(dotimes (num arg arg)
(end-of-line) (newline)
(yank))))))
Курсор останется на последней строке. В качестве альтернативы вы можете указать префикс для одновременного дублирования следующих нескольких строк:
(defun duplicate-line (&optional arg)
"Duplicate it. With prefix ARG, duplicate ARG times."
(interactive "p")
(save-excursion
(let ((beg (line-beginning-position))
(end
(progn (forward-line (1- arg)) (line-end-position))))
(copy-region-as-kill beg end)
(end-of-line) (newline)
(yank)))
(next-line arg))
Я часто использую обе, используя функцию-оболочку для переключения поведения аргумента префикса.
И привязка клавиш:
(повторяющаяся строка global-set-key (kbd "C-S-d") ')
При использовании Spacemacs можно просто использовать duplicate-line-or-region
, связанный с:
SPC x l d