Rolagem suave para vim no Mac Terminal / iTerm?

13

É possível obter rolagem suave (usando a roda de rolagem do mouse ou o touchpad do macbook) em um terminal no Mac OSX (Lion)? Além disso, eu poderia fazer isso no vim?

Acho que a rolagem suave ajuda na leitura do código; não gosto quando você pode rolar apenas em linhas discretas, em oposição à rolagem contínua pixel a pixel.

obrigado

Eddy
fonte
Você pode ter uma experiência melhor se usar um aplicativo Vim em vez de usá-lo em uma sessão de terminal ( code.google.com/p/macvim , macvim.org/OSX ). Existe algum motivo para você usá-lo dentro de um terminal?
Chris Page
3
O MacVim também não oferece rolagem suave.
Romainl
Olá @romainl. Eu me pergunto como o vim se comporta se o tamanho do buffer (tamanho do Windows) é realmente grande (ou seja, o tamanho do arquivo inteiro). Vamos testar isso. Em seguida, poderíamos colocar um buffer vim dentro de um widget GTK (ou QT) de rolagem suave e rolar todo o buffer vim dentro do widget sem problemas. Isso teria o benefício adicional de que o cursor poderia ser facilmente oculto como nos editores modernos. Quando o usuário move o cursor, o widget sabe (usando a mesma API que o gVim usa) e atualiza a posição de rolagem de acordo.
trusktr
(continuação.) A divisão da janela pode até ser conseguida duplicando a saída de arquivo completo do vim em um novo widget e rolando o widget suavemente para a posição apropriada. Tudo isso exigiria alguma aritmética simples e um bom conhecimento de um bom kit de ferramentas de widget. Janela dividir (horizontal e vertical) e rolar e redimensionar os widgets seria o. O resto seria muito fácil de fazer (menus, guias, coisas que o gVim e o qVim já fazem).
trusktr
(continua.) Isso tem o potencial de melhorar bastante o desempenho do vim. Pense nisso: toda vez que você rola pelo console vim ou pelas janelas g / qvim (atualmente), o vim precisa reescrever quase todos os caracteres na tela. Se o buffer do vim tivesse tamanho total e a rolagem fosse manipulada independentemente por um widget de rolagem suave, o vim precisaria apenas atualizar o valor de uma linha de caracteres por vez sempre que mover o cursor para uma nova linha (ou, melhor ainda, uma única quando você avançar ou retroceder um caractere). Isso seria uma enorme vantagem de desempenho para o vim!
trusktr

Respostas:

5

Estou usando o iterm2 e estou encontrando uma funcionalidade muito boa usando o vim 7.3 no terminal com as seguintes opções:

set mouse=niv #or set mouse=a
set clipboard=unnamed

EDIT: set mouse = a também parece legal de usar, conforme indicado pela outra sugestão.

O que isso faz é alternar automaticamente para o modo visual do normal ao selecionar texto ou para o modo que diz ((inserir) VISUAL) - no modo de inserção. Isso também tem a vantagem prática de não definir esses modos, pois quando você tiver números de linha ou números de linha relativos, ele seguirá em frente e copiará os números que você provavelmente não deseja copiar. Quando você coloca o modo visual ativado por mouse dessa maneira, evita copiar esses números de linha, pois trabalha para controlar a seleção do modo visual em vez da seleção do terminal nativo (que é suprimido). A rolagem funciona perfeitamente, lembrando que ela seleciona tudo de onde você iniciou a seleção até a parte inferior da tela. Esqueça as teclas ctrl + c / ctrl + v no vim - Você usa os comandos vim yankypasta (y, yy, p,

http://vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing#Comments

Novamente, o terminal integrado iterm2 - osx é lixo. Eu realmente não vejo a sua carne com rolagem linha por linha, pois estou feliz com o modo como isso simplesmente funciona como o vim, mas talvez seja por razões semelhantes ao motivo pelo qual eu não posso assistir outras pessoas jogando videogame fora de casa. enjoo de movimento ou por que a luz fluorescente e o monitor CRT mexem com a cabeça das pessoas a ponto de enxaqueca. Tente ajustar a taxa de atualização do seu cérebro, você pode sentir o botão se pressionar a têmpora com força suficiente e girar.

Dmitri DB
fonte
0

Eu realmente não concordo com você, mas aqui está um plug-in Terminal.app que faz o que você deseja e muito mais.

Pode ser necessário adicionar

set mouse=a

para o seu .vimrc. Veja :help mousepara mais informações.

romainl
fonte
Infelizmente, o plugin requer SIMBL, que não está disponível para Lion
Eddy
Eu não sabia porque não tenho Lion. O MouseTerm é a única maneira de adicionar a rolagem do mouse ao Terminal.app que eu já ouvi falar. Parece que algumas pessoas relataram um sucesso limitado no uso do SIMBL no Lion, você tentou? Também vejo que o iTerm2 fornece "relatórios de mouse" e rolagem, mas provavelmente rolará linha por linha. Como uma nota lateral eu mal rolar (para cima / baixo / j / k) mais: eu acho /, ?, fF, tTe <C-f>/ <C-b>muito mais útil.
Romainl
Observe que isso faz com que a rolagem da roda do mouse funcione, mas não aborda o problema principal: "Não gosto quando você pode rolar apenas em linhas discretas, em oposição à rolagem contínua pixel a pixel".
Chris Página
Esse tipo de rolagem (linha por linha) é codificado no Vim. Felizmente, não há maneira de contornar isso. Se alguém realmente precisa, deve insistir com argumentos cuidadosamente redigidos no vim-dev ou fornecer um patch.
Romainl
A razão pela qual desejo uma rolagem suave é que eu tendem a perder meu lugar ao percorrer as linhas discretamente. É difícil de explicar. Talvez não afeta todos, mas ele faz para mim
Eddy