Existe um atalho para reutilizar o termo de pesquisa da localização e substituição?

8

Acho que existe uma possibilidade distinta de que essa pergunta já tenha sido feita, mas não consigo encontrá-la.

Se estou fazendo algo assim :s/foo/bar/ge depois quero ligar novamente na próxima linha, mas com, em bazvez de bar, existe uma maneira mais rápida de fazer isso? Eu sinto que &bazdeveria funcionar, mas não funciona.

Eli Sadoff
fonte

Respostas:

11

Não é exatamente o que você pede, mas você pode fazer isso:

:s/foo/bar/g

E depois:

:s//baz/g

Você pode usar isso porque, quando você usa :so padrão pesquisado, é salvo no registro de pesquisa. Com o qual você pode ver :reg /.


Trabalho em andamento: você pode acelerar seu fluxo de trabalho com:

nnoremap && :s<UP><C-F>F/cT/

E use-o assim:

:s/foo/bar/g

e depois

&&baz<CR>

Decomposição:

nnoremap &&         " define a new mapping
:s<UP>              " get the last :s command in the history
<C-F>               " use this command in the cmdline window
F/                  " go back to the last /
cT/                 " change back up to the last /

Algumas notas:

  • Isso não funcionará se você não tiver nenhum sinalizador
  • Isso não funcionará se você não tiver uma string substituta
  • Ele deve trabalhar de outra forma

(deixe-me saber se posso melhorar).

Alguma leitura:

  • :h cmdline-window
  • :h c_CTRL-F
nobe4
fonte
2
Isso é definitivamente melhor do que o que eu estava fazendo antes. Vou levá-lo de que, infelizmente, pode não haver uma maneira mais rápida :(.
Eli Sadoff
Não AFAIK, e eu estou tentando criar um mapeamento que faz o que quiser, mas fora da caixa eu tenho certeza que você está limitado a digitação de novo a expressão substituto
nobe4
5

Além da resposta do @ nobe4, Damian Conway possui dois mapeamentos bastante interessantes para acelerar a pesquisa e substituir as ações. Eles vêm disso como eu vim entrevista que vale totalmente a pena ler completamente.

Para citá-lo:

[...] eu descobri que estava sempre fazendo pesquisas e substituições globais (ou seja :%s/X/Y/g<CR>), então eliminei a digitação repetitiva roubando o Scomando nunca usado (por mim) :

nmap  S  :%s//g<LEFT><LEFT>

Agora eu só preciso digitar: SX / Y

Mas então comecei a perceber com que frequência fazia uma pesquisa / por algum padrão e, depois de analisar as correspondências, queria substituir globalmente todas elas. Mesmo com o mapeamento S que foi a repetição mais irritante: primeiro faça a pesquisa: / pattern e depois substitua: Spattern / Replacement Então eu roubei o comando M (também nunca usado por mim) para isso:

nmap <expr>  M  ':%s/' . @/ . '//g<LEFT><LEFT>'

Agora é só: faça a pesquisa: / pattern e substitua todas as correspondências: Mreplacement


Para responder sua pergunta, acho que você pode modificar um pouco o primeiro mapeamento para algo como isto:

nmap  S  :s///g<LEFT><LEFT>

Dessa forma, você pode primeiro fazer sua substituição :s/foo/bar/g, ir para a próxima linha, pressionar Se você obterá: :s//|/gonde |está o cursor, agora você pode digitar sua nova subscrição.

statox
fonte