Vim neden yapıştırılan kodu yanlış yapıştırıyor?


100

Bu komut dosyasını yapıştırırsam Vim'de:

#!/bin/sh
VAR=1
while ((VAR <  10))
    do
        echo "VAR1 is now $VAR"
        ((VAR = VAR +2))
    done
    echo "finish"

Bu garip sonuçları alıyorum:

#!/bin/sh
#VAR=1
#while ((VAR <  10))
#       do
#                       echo "VAR1 is now $VAR"
#                                       ((VAR = VAR +2))
#                                               done
#                                                       echo "finish"
#                                                       

Karma işaretleri (#) ve sekmeler göründü. Neden?


31
Bu, vi.stackexchange.com için daha iyi bir soru olabilir
Eric Renouf,

@EricRenouf neden? (dürüst soru)
Qix

3
@ qix benim düşüncem, bu, vim'in nasıl çalıştığı, bir soru * vix üzerinde kullanılan ortak bir araçtır, ama * nix, vim kullanmak için bir gereklilik değildir
Eric Renouf,

1
@JaredBurrows Yapar umarım yapar
Eric Renouf

1
Hamuru nasıl tetikliyorsunuz? Fare ile mi?
Ben Voigt

Yanıtlar:


122

İki sebep var:

Yapıştırarak için vimotomatik girinti etkinken, sen değiştirmek gerekir modunu yapıştırmak yazarak:

:set paste

Ardından mod eklemek ve kodunuzu yapıştırmak için değiştirebilirsiniz. Yapıştırma işlemi tamamlandıktan sonra, şunu yazın:

:set nopaste

Yapıştırma modunu kapatmak için Bu yaygın ve sık kullanılan bir işlem olduğundan vim, geçiş yapıştırma modunu sunar:

set pastetoggle=<F2>

İstediğiniz F2tuşa geçebilir ve şimdi yapıştırmayı kolayca açıp kapatabilirsiniz.


Yorumların otomatik olarak eklenmesini kapatmak için, bu satırları vimrc'nize ekleyebilirsiniz :

augroup auto_comment
    au!
    au FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END

vimayrıca , sistem panosundan metin yapıştırmanız için bir yapıştırma kaydı sağlar. Sisteminize bağlı olarak "*pveya kullanabilirsiniz "+p. OSX veya Windows gibi X11 olmayan bir sistemde, *kayıt defterini kullanmanız gerekir . Bir X11 sisteminde, Linux gibi, ikisini de kullanabilirsiniz.

daha fazla okuma


2
Vim'i sonsuza kadar kullanıyorum ve bunu hiç bilmiyordum. Çok teşekkürler.
Caja

Modern grafik terminal emülatörlerinin çoğu "köşeli yapıştırma modu" adı verilen bir özelliği destekler. Vim, terminalden, yapıştırılan metni belirli kaçış dizileriyle çevreleyen bu modu etkinleştirmesini isteyebilir. Vim bunu tanıyabilir ve yapıştırma süresi boyunca sarma / girintiyi kapatabilir. Uzun hikaye fırtınası: yapıştırma "beklendiği gibi çalışır" Ben bir vim kullanıcısı değilim, ancak hızlı bir web taraması bu modu nasıl yapılandıracağınızdan emin olacaktır.
egmont

2
@MichaelDurrant set pasteasla vimrcinizde olmamalıdır. Ekleme modu eşlemeleri, komut satırı eşlemeleri, kısaltmalar, metin genişliği, sargı bezi, otomatik bağlayıcı, smartindent, softtabstop, formatoptions, indentexpr ve diğerleri gibi birçok şeyi devre dışı bırakır veya sıfırlar. :h pastelistenin tamamı var. Çoğu insan bu şeylerin bir kısmını veya tamamını kullanır ve neden ayarların göz ardı edildiğini merak eder.
FDinoff

4
Genelde :r!catsözlü yapıştırmayı yapıyorum .
Simon Richter

1
set mouseFare tıklamasıyla yapıştırırken yapıştırma moduna otomatik olarak girip çıkabilen etkileşimi tartışmaya değer olabilir .
Ben Voigt

36

Vim macunu kullanın. İstediğiniz şey pano tamponunda ne olduğunu yapıştırmak "+p

Bu seçer +ve yerine yapıştırır.

Linux kullanıyorsanız *, X / orta tıklama tamponu (en son seçilen metin).

O zaman vim bir macun olduğunu bilir.

Aksi taktirde, vim yapıştırılan tuşları yazdığınızı ve kendi otomatik girintisini (kopyalanan girintinizin üstüne) tamamen yapıştırmanın sonuna kadar yaptığını düşünüyor.

Bunun SSH üzerinden çalışması için bir not olarak, panonuzun paylaşılması için bir seçenek belirlemeniz gerekir. -Y

Daha man sshfazla ayrıntı için bakınız.


4
Bu aslında doğru cevap
imho

Bu sadece grafiksel vim ( gvim) için çalışıyor gibi görünüyor ; Bir terminal emülatörü çalışan vim "* p, değil geçerli seçimi ile son silinen metni yapıştırır.
wurtel

Ben gvim kullanmıyorum, sadece terminal vim. fare ayarın nedir fare ayarım c. Fare seçimine izin verildiğinde nasıl çalıştığından emin değil. set mouse?
exussum

2
Ayrıca kontrol vim --versiono pano desteği ile derlendi görmek se +xterm_clipboardçıktı olmalıdır
exussum

@ wurtel: Belki unnameddizge ile pano ayarladınız .
cuonglm

8

Sekmeler takıldı çünkü otomatik bağlayıcınız açık ve :set noaiterminale yapıştırmadan önce autoindent ( ) özelliğini kapatarak bu davranışı devre dışı bırakabilirsiniz .

Yorum satırları otomatik yorumlarla üretilir ve kapatılarak devre dışı bırakılabilir.

Bunlara alternatif olarak, geçiş :set pastekodlarını kullanarak, biçimlendirilmiş kodunuzu yapıştırarak ve :set nopastenormal davranışı geri yüklemek için istenen davranışı yapmanız gerekir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.