Eu faço C-a
C-k
C-k
para matar todo o ponto de linha está ligado.
Se eu quiser copiar a linha em vez de matá-la, posso pressionar C-/
C-/
logo após digitar a sequência acima.
Alternativamente, eu posso fazer C-a
C-SPC
C-n
M-w
.
Existe uma maneira mais rápida de eliminar ou copiar todo o ponto de linha?
copy-paste
editing
itsjeyd
fonte
fonte
kill-whole-line
. :)evil-mode
. Aprenda comandos Vim, você não vai se arrepender!Respostas:
Você pode usar
kill-whole-line
para matar o ponto de linha inteiro. A posição do ponto não importa. Este comando está vinculado C-S-DELpor padrão.Você também pode instruir
kill-line
(vinculado a C-k) a eliminar a linha inteira definindo a variávelkill-whole-line
como umnil
valor não :Observe que o ponto deve estar no início da linha para que isso funcione.
Depois, existem essas duas jóias (via emacs-fu ):
Com estes no lugar, você pode matar ou copiar o ponto de linha está ligado com um único toque de tecla :
Observe que se houver uma região ativa
kill-region
ekill-ring-save
continuar fazendo o que normalmente fazem: Mate ou copie-a.Portando
slick-cut
eslick-copy
para o novo sistema de aconselhamentoO Emacs 24.4 introduz um novo sistema de aconselhamento . Enquanto
defadvice
ainda funciona , há uma chance de que ele seja descontinuado em favor do novo sistema em versões futuras do Emacs. Para se preparar para isso, convém usar versões atualizadasslick-cut
eslick-copy
:fonte
kill-region
ekill-ring-save
ainda funciona mesmo quando a região não está "ativa". Isso substituirá esse comportamento. Uso esse comportamento de tempos em tempos, mas se você não está acostumado a usá-los dessa maneira, provavelmente não perceberá a diferença.kill-region
etc é utilizável / útil quandomark-active
énil
.C-SPC
duas vezes para ativar e desativar a marca. Mova o cursor para outro local do arquivo e executekill-region
e ele matará a região entre ponto e marca, mesmo que a marca não esteja ativa. Alguns exemplos de comandos que definem (mas não ativam) a marca sãoyank
eisearch
. Depois de executar esses comandos de classificação, sei onde está a marca, mesmo que ela não esteja ativa, e muitos comandos (inclusivekill-region
) me permitem usar a marca sem ativá-la explicitamente.A solução que encontrei para mim é usar argumentos de prefixo.
Para mim, matar meia linha é um recurso útil, mas também quero uma maneira mais fácil de matar linhas inteiras. Então eu fiz isso para que
kill-line
apenas assassinasse tudo à vista quando recebesse um argumento de prefixo.Com esta pequena macro,
C-k
ainda mata do ponto, masC-3 C-k
engole três linhas inteiras. Como bônus, obtemos okill-whole-line
comportamento fazendoC-1 C-k
.fonte
kill-ring-save
não aceita argumentos de prefixo ...kill-visual-line
é obrigado aC-k
. Eu resolvo isso. Obrigado novamente.Há um pacote chamado
whole-line-or-region
que aconselha vários comandos internos para que eles ajam na linha atual se nenhuma região estiver ativa; portantoM-w
, copie a linha atual eC-w
a mate, por exemplo. Uso o pacote há anos e o considero indispensável.Além disso, este pacote faz com que um prefixo numérico indique o número de linhas para atuar, assim
M-2 M-w
copia duas linhas. As outras respostas aqui não fornecem essa funcionalidade útil.Eu assumi a manutenção do pacote na minha conta do github quando o autor parou de mantê-lo e deixou de responder.
whole-line-or-region
também fornece recursos para adicionar esse comportamento a outros comandos, caso você precise.fonte
Esta não é uma resposta para os emacs ortodoxos. Se, no entanto, você estiver disposto a blasfemar com
evil
a edição modal, você pode:dd
para matar linhacc
para linha de cópiaAmbos podem ser prefixados pelo número de linhas para matar / copiar (por exemplo,
4cc
copiará as próximas 4 linhas).fonte
Além da resposta @itsjeyd, posso sugerir essas duas funções?
Em seguida, definições principais (provavelmente você as adaptará):
(global-set-key (kbd "<f2>") 'xah-cut-line-or-region) ; cut
(global-set-key (kbd "<f3>") 'xah-copy-line-or-region) ; copy
(global-set-key (kbd "<f4>") 'yank) ; paste
Cortesia de ErgoEmacs
fonte
Como extensão à resposta de @ itsjeyd acima, tenho o seguinte. (A lógica provavelmente pode ser um pouco limpa, e quando eu for para o novo sistema de aconselhamento, provavelmente a estenderei também para estender
sexp
/paragraph
se repetir novamente).Uma inicial
C-w
/M-w
pegará apenas a palavra no momento, enquanto a chama uma segunda vez pegará a linha inteira.fonte
Como você deseja fazer isso com o mínimo de pressionamentos de teclas, pode usar o excelente pacote de acordes de teclas de David Andersson . Um "acorde de teclas" consiste em duas teclas pressionadas simultaneamente ou uma única tecla pressionada duas vezes.
Você pode vincular quaisquer acordes de teclas a essas funções.
fonte
Uma maneira menos ad-hoc é definir
mark-whole-line
, para o qual o Emacs realmente deve ter um comando padrão.Então
C-2 C-w
fará o trabalho.Isso também facilita as coisas, como comentar toda a linha atual.
fonte
Esta é uma modificação da resposta por itsjeyd - atualmente a resposta mais votada e que eu uso há anos. No entanto, há problemas: a versão recomendada de
kill-ring-save
algum dia falharia porque a marca não está definida (normalmente em um novo buffer) e, mesmo quando funcionava, o cursor fazia uma dança estranha após o uso da função para copiar uma única linha . Depois de algumas escavações, percebi que isso acontece porque askill-ring-save
chamadasindicate-copied-region
após o término de seu trabalho, mas como ponto e marca não correspondem à região copiada,indicate-copied-region
marcaram a região errada.Disse o suficiente. Aqui está uma solução que resolve isso:
Não há nada de errado com os conselhos de itsjeyd
kill-region
. De qualquer forma, aqui está uma variante, estilisticamente mais consistente com o acima:Observe que, se
transient-mark-mode
não estiver ativado, esses conselhos não farão nada.fonte
whole-line-or-region
; veja a resposta de @sanityinc.Eu uso um pacote chamado composable.el . O mais interessante do pacote é que ele modifica Mw e Cw (comandos copy e kill) para serem mais parecidos com o Vim, com a opção de aceitar comandos tradicionais do emacs. Então
C-w l
mata uma linha inteira. Mas você também pode fazer coisas comoC-w M->
matar o final do arquivo. Ambos os comandos agem como normais ao marcar uma região.fonte