2009-07-11 14 views
5

jestem kopiowanie kodu z witryny matplotlib i wklejanie do edytora vim w terminalu w systemie Mac OS X:Usuń bałagan wiodącą spacje w vim na Mac OS X

pylab_examples example code: ellipse_demo.py

Chociaż to działa prawidłowo w BBEdit:

`from pylab import figure, show, rand 
from matplotlib.patches import Ellipse 

NUM = 250 

ells = [Ellipse(xy=rand(2)*10, width=rand(), height=rand(), angle=rand()*360) 
     for i in xrange(NUM)] 

fig = figure() 
ax = fig.add_subplot(111, aspect='equal') 
for e in ells: 
    ax.add_artist(e) 
    e.set_clip_box(ax.bbox) 
    e.set_alpha(rand()) 
    e.set_facecolor(rand(3)) 

ax.set_xlim(0, 10) 
ax.set_ylim(0, 10) 

show() 

Oznacza to, że cały kod jest prawidłowo wyrównany. W Vimie wygląda to następująco:

from pylab import figure, show, rand 
from matplotlib.patches import Ellipse 

NUM = 250 

ells = [Ellipse(xy=rand(2)*10, width=rand(), height=rand(), angle=rand()*360) 
     for i in xrange(NUM)] 

      fig = figure() 
      ax = fig.add_subplot(111, aspect='equal') 
      for e in ells: 
        ax.add_artist(e) 
         e.set_clip_box(ax.bbox) 
          e.set_alpha(rand()) 
           e.set_facecolor(rand(3)) 

           ax.set_xlim(0, 10) 
           ax.set_ylim(0, 10) 

           show() 

Jak naprawić tę irytującą sytuację? Czy ma to coś wspólnego z różnymi konwencjami powrotu karetki/podawania linii na komputerze Mac?

Odpowiedz

17

Przed wklejeniem tekstu użyj polecenia :set paste. To wyłącza autoindent oraz różne inne rzeczy, które mogą zakłócać wklejanie. Aby przywrócić normalne działanie, użyj :set nopaste.

+0

wypróbowany Greg - nadal nie działa –

+0

Cóż, nie jestem pewien, co zasugerować. To, co opisujesz, jest właśnie problemem, który ma rozwiązać polecenie ': set paste'. Używam go, gdy mam do czynienia z tym samym problemem i działa on dla mnie. –

+0

od tego poprzedniego komentarza. Najwyraźniej za późno w nocy, tutaj w Londynie! Mam to działa. Dzięki, Greg, ładny. –

-1

Jeśli używasz emacs, będzie to prosta sprawa z M-x mark-whole-buffer i M-x indent-region.

+5

Wbrew powszechnemu przekonaniu, "Użyj czegoś innego" rzadko jest rozwiązaniem. –

+0

Dzięki jrockway haha. Niestety, wcięcia stają się coraz większe w każdym wierszu, więc nie pomaga, lub użyłbym polecenia Vima <;;;;;;;;;;;;; _ - –

+1

. Jak widzimy, odkąd używa Vima, jest to tak proste jak ': set paste'. – Telemachus

1

Jeśli trzeba, można po prostu użyć cat(1):

$ cat > newfile.py 
Paste the code here, then press Ctrl-D for EOF. 
Make sure to type EOF on an otherwise empty line 
or bad things will happen to your children. 
$ vi newfile.py 

powinno działać.

+0

yep działa również doskonale. –

+0

Polecam: wkleić wersję wklejenia, szczególnie teraz, gdy wiem o tym, ale w momencie, kiedy zacząłem pisać, nie wiedziałem, że to działa, więc napisałem to na wszelki wypadek. –

+1

Zawsze używałem tej metody w przeszłości, ale po zapoznaniu się z "ustawioną pastą" prawdopodobnie również się przełączy. –

2

Lub użyj :r!pbpaste - wstawia dane wyjściowe z polecenia pbpaste (które jest bieżącym buforem wklejania) pod bieżącą linią; nie trzeba się martwić trybami i takimi.

+1

Używanie zewnętrznego polecenia jest przesadzone, ponieważ jest: put i "+ p, które robią dokładnie to samo." – DrAl

+2

Nie w OS X, zobacz mój komentarz do twojej odpowiedzi –

0

Oprócz wspomnianej już komendy :set paste zawsze można wpisać "+p, aby wkleić zawartość schowka do bieżącej lokalizacji. Nie użyłem Vima na Mac OS X, ale jestem pewien, że to nadal jest poprawne. W systemie Linux istnieje "*p dla schowka wyboru i "+p dla schowka kopiowania i wklejania; w systemie Windows oba wskazują schowek systemowy. "+p jest początkowo nieco dziwną komendą, ale gdy już przyzwyczaisz się do używania tego typu polecenia, staje się bardzo szybkie. Alternatywnie możesz użyć :put +, aby zrobić to samo.

+1

Na OS X to nie działa, kiedy testowałem to, rejestr '+' nie wyciągał ze schowka systemowego, tylko z wewnętrznego rejestru vi. Próbowałem zarówno 'vi', jak i' vim', działając zarówno w Xterm, jak i natywnym pliku Terminal.app; ': r! pbpaste firmy Apple 'działa, integracja rejestru vi nie ma wartości –

+0

Tak jest w przypadku macVim, ale myślę, że to nie jest rejestr + w linii poleceń vim –