Se eu abrir um arquivo grande (usando esse termo generosamente, como ~1000 linhas é o suficiente) no vim, e pular para algum lugar, às vezes obtenho um destaque que ignora o texto fora da tela. Por exemplo, se eu pular para o final de um loop while grande (no destaque sh, mas tive o mesmo tipo de problema com o destaque C), o "done" será marcado em vermelho como se não encerrasse realmente um loop. É como se o programa não estivesse olhando para trás o suficiente para contextualizar adequadamente o que estou olhando no momento. Por outro lado, se eu for para o início do loop e 'j' para baixo, ele será destacado corretamente. Existe alguma maneira de consertar isso?
Como apagar todas as ocorrências de Answer.*
de um arquivo e colá-lo no final de um arquivo usando vim. Posso usar comandos como sed
ou quaisquer outros.
1. Lorem ipsum? Answer: lorem
2. Lorem? Answer: ipsum
.....
.....
250000. Dolour? Answer: amet
Fim do arquivo ou novo arquivo ambos aceitáveis.
Cole as respostas linha por linha
1. Lorem ipsum?
2. Lorem?
.....
.....
250000. Dolour?
1. Answer: lorem
2. Answer: ipsum
.....
.....
250000. Answer: amet
Se alguém instalar o software Github Copilot para o editor Vim, ele habilitará o copiloto por padrão, o que pode ser visto como um problema de privacidade.
Quero desabilitar o copiloto por padrão e habilitá-lo manualmente no :Copilot enable
editor somente quando necessário.
Como posso fazer isso?
Preciso disponibilizar o texto retornado por echo $(which bash)
para colar em um arquivo de texto aberto no Vim.
A causa da minha confusão é que parece que existem pelo menos três pranchetas:
- área de transferência do sistema (por exemplo, Command-C > Command-V)
- área de transferência do shell (por exemplo, Control-U > Control-Y)
- Área de transferência do Vim (por exemplo, yy > p)
Então, para cumprir minha tarefa, posso, por exemplo, digitar echo $(which bash) | pbcopy
, abrir o Vim e pressionar Command-V.
Isso funciona, mas não tenho certeza se é assim que os usuários não novatos do Vim prefeririam fazê-lo, porque nesse caso o Vim lê da área de transferência do sistema, e a leitura da área de transferência do sistema tem muitas nuances: por exemplo, se o seu Vim é compilado com uma opção específica, se você tiver configuração apropriada em seu arquivo .vimrc
, etc.
Qual é a maneira mais correta de fazer isso?
Este script vim faz seu trabalho
#!/usr/bin/vim
%!sed 's/ .*//'
%!sort -fu
norm dd
% norm $D
O único problema é esta mensagem no final (tenho que pressionar ENTER no teclado)
"20 lines filtered
20 lines filtered
Press ENTER or type command to continue
"
Como simular ENTER no script? Para evitar pressionar manualmente coloquei isso no final do script mas não funciona
norm <^M>
A verificação do problema é sed (que produz a saída), não vim. Como deixar o sed mais silencioso? Usar "sed -n" produz uma saída vazia.
Tentei com um texto com essas linhas
Quando digito o caractere q
no teclado no vim, ele sai do vim. Por que?
Hoje tentei editar um arquivo com a extensão .man
. Eu queria editar o arquivo com uma macro, então tentei digitar qq
- mas quando a primeira q
foi inserida, vim
fechei!
vim test.man
Esta é uma nova instalação no Debian 12. Não tenho um .vimrc
arquivo definido.
Renomeei o mesmo arquivo com uma .man
extensão para ter uma .txt
extensão e, desta vez, pude criar uma macro conforme o esperado - digitar a q
não causa vim
a saída.
mv test.man test.txt
vim test.txt
Por que o vim está saindo ao digitar a q
ao tentar editar um arquivo com uma .man
extensão de arquivo? E como faço para parar esse comportamento?
Então ... estou usando o Vim (no terminal, não qualquer outro tipo de interface gráfica; sempre que o Vim for usado sozinho, assuma que é o terminal vim).
O Vim é decente, na verdade não acho a curva de aprendizado tão ruim. Sou um pouco menos eficiente do que seria em um editor de texto normal, principalmente devido ao ato de alternar entre o modo normal.
Mas há uma coisa no vim que me deixa com os pregos no caixão. Normalmente, quando pressiono Ctrl+Shift+C no meu terminal, ele copia o texto que destaquei para a área de transferência do gerenciador de janelas e posso colá-lo. Ctrl+C e Ctrl+V (ou suas variantes) funcionam perfeitamente bem em todos os aplicativos que usei em meu sistema.
Com o Vim, posso pressionar Ctrl+Shfit+V e ele irá colar os dados que tenho na minha área de transferência. Mas, pela minha vida, o Vim não copia para a área de transferência global. Eu tentei...
- Ctrl+Shift+C com modo visual
- usando ambos
"*y
e"+y
(ou outro comando de cópia) - usando
set clipboard=unnamed
eset clipboard=unnamedplus
- instalando o gvim para "suporte à área de transferência" (para terminal vim) e repetindo as outras etapas.
O Vim simplesmente... se recusa a copiar para a área de transferência.
Mas eu tive uma ideia. Não preciso copiar o Vim para a própria área de transferência . Eu só preciso parar de bloquear/interceptar o comportamento do terminal para Ctrl+Shift+C no modo visual . Mas ainda sou novo no Vim e não tenho absolutamente nenhuma ideia de como alguém conseguiria isso. Todas as minhas tentativas de procurar algo tão específico são bastante insípidas. Esta é a minha pergunta para este formulário: existe uma maneira de fazer com que o Vim permita que o emulador de terminal (Alacritty) copie para sua área de transferência usando Ctrl+Shift+C? Se alguém com mais experiência em Vim do que eu pudesse me dar uma dica, eu realmente apreciaria.
Meu sistema, para referência, é Arch Linux usando o gerenciador de janelas Sway com o emulador de terminal Alacritty. Já vi várias coisas sobre a instalação de um gerenciador de área de transferência para o Sway, porque o Sway padrão não armazena os dados da área de transferência se você sair do programa do qual copiou o texto. No entanto, nunca tive problemas com isso; mesmo quando saio completamente de um programa, os dados ainda estão lá. A área de transferência padrão funciona perfeitamente para mim e não quero necessariamente instalar e configurar um gerenciador de área de transferência apenas para que o vim funcione , a menos que seja a única opção. De qualquer maneira, esse não parece ser o problema.
Além disso, se ajudar, o aplicativo independente gvim suporta a cópia para a área de transferência, mas o terminal padrão Vim não . Se possível, eu realmente gostaria de usar um editor de texto de terminal. Mas acho que usarei o aplicativo gvim se nada puder ser feito.
Em uma instalação debian totalmente nova, quando não ~/.vimrc
está presente, vim
mostra todos os arquivos no diretório atual ao tentar abrir outro arquivo para edição no modo normal/comando, conforme mostrado abaixo:
No entanto, quando a ~/.vimrc
está presente, mesmo que esteja vazia, de repente não consigo ver outros arquivos no mesmo diretório.
Estou procurando a vim
opção que desativei acidentalmente, para poder reativar esse comportamento.
Tenho um arquivo aberto vim
e terminei minhas edições. Existe uma maneira de eu fechar o arquivo (ou buffer ) para que a vim
tela fique em branco?
Estou tentando entender por que o VIM continua redefinindo minha largura de texto para 0.
Para criar o problema, abro um novo arquivo no Vim e digito:
:set textwidth=72
Em seguida, insiro uma ou duas frases e vejo que isso garante que a largura do texto nunca ultrapasse 72 caracteres. Tudo certo. O problema surge quando salvo o documento usando o comando abaixo e, quando reabro o arquivo, a largura de configuração é redefinida para 0.
:wq!
Portanto, se eu reabrir este arquivo agora, a largura do texto será zerada. Confirmo digitando:
: set textwidth?
E o resultado é 0. Isso é extremamente irritante. Como posso resolver esse problema?
Um cara respondeu e resolveu esse problema. Para quem está se perguntando o que eu fiz exatamente:
$ touch ~/.vimrc
$ cat > .vimrc << EOF
> set number
> set textwidth=72
> EOF
Pronto, largura de texto persistente.