2012-09-25 14 views
9

użyć klawisza Tab do wcięcia mojego kodu Pythona w vim, ale ilekroć skopiować i wkleić blok Vim zastępuje każdą kartę z 4 pomieszczeń, co podnosi IndentationErrorJak utrzymać wypustki podczas wklejania w vim

próbowałem ustawienie :set paste jak zasugerowano w powiązanych pytania, ale to nie robi różnicy

Inne strony sugerować wklejanie „beztabelkowy” kod i za pomocą edytora wizualnego, aby ponownie wcięcie, ale jest to proszenie się o kłopoty, jeśli chodzi o dużych bloków

Czy są jakieś ustawienia, które mogę zastosować do vima, aby zachować zakładki do kopiowania/wklejania?

Dzięki za wszelką pomoc z tym :)

edit:

jestem kopiowanie i wklejanie wewnątrz vim przy użyciu standardowych technik gnome-terminal (Ctrl + Shift + C/mysz itd.)

moim .vimrc jest:

syntax on 
set ts=4 
if has("terminfo") 
let &t_Co=8 
let &t_Sf="\e[3%p1%dm" 
let &t_Sb="\e[4%p1%dm" 
else 
let &t_Co=8 
let &t_Sf="\e[3%dm" 
let &t_Sb="\e[4%dm" 
endif 

Rozejrzałem się, że tS -> Zestawy tabulatory do n do wprowadzania tekstu, ale nie wiem WHA Wartość t zachowałaby znak tabulatora:

+0

Czy wklejasz w vimie lub z vima do innego programu lub z innego programu do vima? –

+0

Jakie są twoje ustawienia wcięć? 'tabstop',' expandtab', 'shiftwidth',' shiftround', 'autoindent',' copyindent'. – romainl

+0

Kopiuję i wklejam w vimie, ale używając standardowych technik terminalu gnome (ctrl + shift + c lub kliknięcie prawym przyciskiem myszy -> kopiowanie) – Awalias

Odpowiedz

5

Zobacz wszystkie dostępne opcje i sposoby ich wzajemnego oddziaływania.

Są to dobre ustawienia, jeśli wolisz zakładki:

set tabstop=4 
set shiftwidth=4 
set noexpandtab 

Przy tych ustawieniach trafisz <Tab> i masz <Tab>.

Są to dobre ustawienia, jeśli wolisz spacji:

set tabstop=4 
set shiftwidth=4 
set expandtab 

Przy tych ustawieniach trafisz <Tab> i masz <Space><Space><Space><Space>.

Cokolwiek wybierzesz, nie powinieneś używać klawiszy terminalu do kopiowania/wklejania. Wewnątrz Vima powinieneś "zerwać" z y i "umieścić" z p lub P; opcjonalnie za pomocą określonego rejestru, takiego jak "ay/"ap, aby szarpać/wkładać do/z zawartości @a lub "+y/"+p, aby szarpać/wklejać do/ze schowka systemowego (jeśli twój Vim jest zbudowany ze wsparciem schowka).

Na marginesie, należy używać długich nazw formularzy ustawień, ponieważ są one bardziej czytelne niż ich krótki odpowiednik. Twoja przyszłość będzie ci wdzięczna.

2

Po pierwsze, upewnij się, że twoje ustawienia wcięć reprezentują twój ulubiony styl, jak pokazał romainl w swojej odpowiedzi.

Jeśli musisz wkleić kod z zewnątrz Vim (np.wybór z innego terminala), komenda :retab! może naprawić spacje w Tabs; dla wklejonym tekstem pełnym polecenia z odpowiednim przedziale byłoby

:'[,']retab! 

Alternatywnie, można spróbować wklejania za pomocą polecenia "*]p, który automatycznie dostosowuje wcięcie do pozycji kursora (patrz :help ]p).

5

What romainl said. Ponadto jest kilka innych ustawień, które uważam za użyteczne. Oto fragment z mojego .vimrc:

set autoindent " always set autoindenting on" 
set smartindent " use smart indent if there is no indent file" 
set tabstop=4 " <tab> inserts 4 spaces" 
set softtabstop=4 " <BS> over an autoindent deletes 4 spaces." 
set smarttab " Handle tabs more intelligently" 
set expandtab " Use spaces, not tabs, for autoindent/tab key." 
set shiftwidth=4 " an indent level is 4 spaces wide." 
set shiftround " rounds indent to a multiple of shiftwidth" 

w vim, wprowadź :h <setting> dla każdego z tych ustawień, aby dowiedzieć się więcej o tym, co robią,

1

byłem średnim click-wklejanie do terminala vim instancji . Mam to w moim vimrc:

set tabstop=2   " (ts) 
set softtabstop=2  " (sts) Turned off with 0 
set shiftwidth=2  " (sw) Used for autoindent, and <<and>> 
set expandtab   " (et) Expand tabs to spaces 

Pobiegłem

:set paste 
:set noexpandtab 

i vim zachowane wypustki, które były w tekście źródłowym. Bez przesłonięcia ustawienia expandtab, vim automatycznie rozszerzył karty w tekście źródłowym.

Powiązane problemy