Quero ter uma maneira rápida de definir a 'paste'
opção Vim , inserir algum texto e reverter para o valor anterior de 'paste'
.
Um caso de uso típico insere o conteúdo da área de transferência do SO literalmente, independentemente de qualquer reescrita no modo de inserção que possa estar ativa, como recuo automático e sem alterar o estado do Vim. Outro caso de uso seria permitir que um recurso de macro do SO injete pressionamentos de tecla no Vim e os interprete como texto literal.
Obviamente, isso generaliza para outras opções - a idéia geral é definir algumas opções, mas apenas pela duração de uma viagem pelo modo de inserção.
Basicamente, quero vincular uma sequência de teclas (por exemplo _i
) a uma macro que faz isso
:set paste
i…<Esc>
:set nopaste
onde, com i…<Esc>
isso, mude para o modo de inserção (como no i
comando) e retome a macro ao retornar ao modo de comando, exceto que eu quero terminar com o 'paste'
ativo ainda, se estiver ativo anteriormente. Como posso fazer isso?
Nota: O conteúdo da área de transferência do SO é mapeado para o "*
registro . Quando isso funciona, a 'paste'
opção não é muito útil. O cenário motivador para esta pergunta é para aqueles momentos em que as condições para "*
suporte ao registro não são atendidas - o Vim não é compilado com o +xterm_clipboard
recurso ou está sendo executado em um terminal como Screen ou SSH que o isola do servidor X ambiente.
fonte
+
ou*
registrar?Respostas:
Faça uma tentativa:
Ele armazena o status atual da pasta na variável inPaste e define a pasta, se ainda não estiver definida. Em seguida, ele configura um autocmd para quando você sai do modo de inserção e o coloca no modo de inserção.
Quando você sai do modo de inserção, ele executa o autocmd, que primeiro remove o autocmd (para que ele não seja executado quando você sai do modo de inserção de qualquer outra maneira) e finalmente define nopaste se você não estava no modo de colar originalmente.
Além disso, se você estiver usando o vim em um terminal, poderá dar uma olhada no vim-bracketed-paste , que usa o recurso de modo de pasta entre colchetes fornecido por vários emuladores de terminal para detectar se você está colando e definir o modo automaticamente.
Editar: corrigido o script
fonte
_i
, apaste
opção está desativada, mesmo que estivesse antes.'paste'
deve estar ativo pelo menor tempo possível. Ele desabilita muitas funcionalidades (incluindo mapas), porque seu único objetivo é evitar interpretar mal o texto que está sendo colado. Como tal, acho que o requisito citado não deveria ser realmente necessário.Dito isto, é realmente muito fácil colar sem a necessidade de definir
'paste'
. Se você estiver executando o gvim ou o+xterm_clipboard
console vim, poderá simplesmente"+p
colar na área de transferência do sistema operacional.O problema da indentação automática durante a colagem ocorre apenas em dois cenários. Inserir o conteúdo de um registro enquanto estiver no modo de inserção (
<C-r>+
) ou clique com o botão do meio do mouse para colar.Em vez de inserir o conteúdo de um registro enquanto estiver no modo de inserção, colar do registro no modo normal evitará o problema de reformatação.
Se você deseja clicar com o botão do meio e colar com o mouse, use a
'mouse'
opção para permitir que o Vim, em vez do terminal, manipule o clique do meio. O Vim irá inserir o conteúdo literalmente, em vez de interpretar o texto recebido como sendo digitado.fonte
'paste'
fato, não está ativo de antemão, mas não quero ter que pensar sobre isso. Costumo trabalhar em um Vim que não tem acesso à área de transferência ou mouse do X, porque meu build do Vim não possui oxterm_clipboard
recurso ou porque estou trabalhando, por exemplo, em uma sessão de tela que está atualmente anexada a um Terminal X.i
, não estou perguntando como parametrizar isso) e restaurar o valor da opção ao retornar do modo de inserção."*p
ou"+p
colar nas pranchetas, mas não quero usar as habilidades de colar do sistema") e, em seguida, essa resposta é desnecessária. Ou não, e então acho que essa resposta tem seu lugar aqui.Pessoalmente, uso a yocombinação de teclas do excelente plug - in sem problemas de Tim Pope por exatamente esse motivo. De sua documentação:
Pode ser um exagero instalar o plug-in simplesmente para sua pergunta, mas acho que ele também fornece uma variedade de outras combinações de teclas úteis (mais informações no README ).
fonte
Com o Vim 8+ no Linux ou Mac, agora você pode simplesmente usar a pasta nativa do terminal (por exemplo, botão do meio do mouse,
ctrl+shift+V
no Gnome,cmd+V
no Mac) se o terminal suportar pasta entre colchetes. Não pressionei
para inserir o modo.Ele colará o conteúdo da área de transferência do sistema operacional, preservando os espaços e as guias sem adicionar a inserção automática. É equivalente ao velho
:set paste
,i
,ctrl+shift+V
,esc
,:set nopaste
método.Você nem precisa mais dos recursos
+clipboard
ou do+xterm_clipboard
vim instalados. Esse recurso é chamado de "pasta entre colchetes". Para obter mais detalhes, consulte /programming/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763fonte