Usando expand-region
Eu recomendaria instalar o expand-region
pacote (disponível também no Melpa). Seria útil para editar situações mencionadas no seu exemplo e muito mais.
expand-region
é inteligente. Com base no modo principal, ele tentará descobrir o que você está tentando selecionar. Não sei de qual idioma você tem o snippet de exemplo, então usarei o seu snippet de código de exemplo e o modificarei levemente para Python (remove;). Portanto, minha explicação abaixo é com o trecho de código abaixo em um python-mode
buffer.
ref = open('specific-file-name')
Se o ponto estiver próximo a uma aspas simples
Os retângulos verticais pretos abaixo indicam a aparência do cursor.
# point on left of left quote, the cursor is hiding the quote under it
ref = open(▮specific-file-name')
# point on left of right parenthesis, the cursor is hiding the parenthesis under it
ref = open('specific-file-name'▮
Em qualquer um dos casos, quando o fizer M-x er/expand-region
, 'specific-file-name'
será selecionado e você poderá pressionar DEL
(ou retroceder) para excluir a seleção.
Se você delete-selection-mode
ativou (eu gosto de ativá-lo pessoalmente), você pode começar a digitar depois de fazer a seleção e isso substituirá a seleção.
Obviamente, se você usa er/expand-region
muito, vincula-o a uma ligação de chave curta. Eu gosto de ligá-lo C-\
. Então, com o ponto ao lado de uma única citação: C-\fname
vai me darref = open(fname);
Se point estiver em algum lugar dentro das aspas
Usando expand-region
, o ponto não precisa estar próximo das aspas. Mas, neste caso, você precisará de apenas mais alguns (geralmente um ou dois mais) pressionamentos de tecla.
Digamos que a posição do cursor esteja como abaixo agora:
# cursor shown below is hiding the i character under it
ref = open('specif▮c-file-name')
Usando a mesma ligação que usei acima:
- A primeira vez que eu clicar
C-\
selecionará specific
.
Agora só preciso clicar \
para expandir a seleção ( expand-region
recurso). Isso irá selecionar specific-file-name
.
Se você tinha ligado er/expand-region
para C-=
, bater =
novamente fará a expansão incremental. Leia sua documentação sobre como vincular chaves para expansão / contração incremental da seleção.
- Bater
\
mais uma vez irá selecionar 'specific-file-name'
.
- Agora você continua pressionando
DEL
para excluir a seleção e digitar fname
. Se delete-selection-mode
estiver ativado, você pode pular o DEL
traço.
Em resumo, com delete-selection-mode
habilitado, os cursos chaves parecer: C-\\\fname
.
Usando change-inner
Eu também me deparei com o change-inner
pacote dos magnars do expand-region
autor (que usa como back-end) para fazer exatamente o que o Vim faz (e também alterar o exterior ).expand-region
ci
Do pacote README:
change-inner
dá a você o ci
comando do vim , construindo expand-region
. É mais facilmente explicado pelo exemplo:
function test() {
return "semantic kill";
}
Com ponto após a palavra semântica
change-inner "
mataria o conteúdo da string
change-outer "
mataria a string inteira
change-inner {
mataria a declaração de retorno
change-outer {
mataria o bloco inteiro
ref = open(|'specific-file-name');
,C-M-k
vai darref = open(|);
. As citações também são sexps equilibrados .delete-everything-inside-parens
em algo, nãodelete-first-sexp-inside-parens
.evil
emula a maior parte do Vim e faz objetos de texto fora da caixa.Em outras palavras, com
evil
ativado e usando as teclas de atalho padrão,ci(
fará exatamente o que você está perguntando: altere o que está dentro dos parênteses.Mais precisamente,
ci(
acorrentaráevil-change
aevil-inner-paren
. Você também pode criar seus próprios objetos de texto arbitrários, como desejar.fonte
evil
, por que deseja a nãoevil
alternativa?Usando smartparens
Mate
1) Use
C-M-u
(sp-backward-up-sexp
) para sair dos'
delimitadores.2) Use
C-0 C-M-k
(0
prefixo +sp-kill-sexp
) para matar coisas dentro do sexp atual ouC-k
(sp-kill-hybrid-sexp
). O último só funciona quandosmartparens-strict-mode
está ativado e o sexp atual se encaixa em uma linha.Marcar e excluir / matar / copiar
1) Encontre o caminho para o início do sexp (neste exemplo
C-M-u sp-backward-up-sexp
é suficiente), marqueC-SPC
e vá para o final do sexp comsp-end-of-sexp
.2) Em seguida, você pode fazer o que quiser:
C-w
matar região, matar regiãoM-w
de salvar anel (copiar),backspace
excluí-la sem bagunçar o anel de morte (somente comdelete-selection-mode
)Função Mark-inside-sexp
smartparens
O pacote tem umasp-mark-sexp
função que marca todo o próximo sexp, ou seja, delimitadores e outras coisas entre eles.Você pode usar uma função como esta para tirar delimitadores da seleção:
Saia do seu sexp usando
C-M-u
repetidamente e ative a marca-dentro-sexp-usando-sp e decida o que fazer com a região ativa.fonte