Wyłączanie automatycznego wcięcia podczas wklejania tekstu do Vima
Staram się nauczyć Vima.
Kiedy wklejam kod do mojego dokumentu ze schowka, dostaję dodatkowe spacje na początku każdej nowej linii:
line
line
line
Wiem, że można wyłączyć auto indent, ale nie mogę go uruchomić, ponieważ mam inne ustawienia sprzeczne lub coś (które wyglądają dość oczywiste w moim .vimrc, ale chyba nie ma znaczenia, kiedy je wyjmę).
Jak wyłączyć automatyczne wcięcia, gdy wklejam kod, ale nadal mam vim Auto indent, gdy jestem piszesz kod? Oto mój plik .vimrc
:
set expandtab
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set bg=dark
set nowrap
19 answers
Update: lepsza odpowiedź tutaj: https://stackoverflow.com/a/38258720/62202
Aby wyłączyć autoindent podczas wklejania kodu, istnieje specjalny tryb "wklejania".
Typ
:set paste
Następnie wklej swój kod. Zauważ, że tekst w podpowiedzi mówi teraz -- INSERT (paste) --
.
Po wklejeniu kodu wyłącz Tryb wklejania, aby automatyczne wcięcia po wpisaniu działały ponownie poprawnie.
:set nopaste
Jednak zawsze uważałem to za uciążliwe. Dlatego ja map <F3>
tak, że może przełączać się między trybami wklejania i nopaste podczas edycji tekstu! dodaję to do .vimrc
set pastetoggle=<F3>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 14:56:29
Aby uniknąć niepożądanych efektów podczas wklejania, należy ustawić opcję:
set paste
Przydatne polecenie, aby mieć w swoim .vimrc jest set pastetoggle=<F10>
lub innym przyciskiem, aby łatwo przełączać się między pastą a nopastem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-31 07:38:47
Zwykle używam :r! cat
, a następnie wklejam ( shift + insert )
Zawartość i CTRL+D
.
Nie ma potrzeby włączania i wyłączania bezpośredniego użycia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-30 12:50:15
Jeśli pracujesz lokalnie, możesz wkleić ze schowka systemowego sekwencję klawiszy:
"+p
Jest to odpowiednie polecenie vim, więc nie musisz się martwić o wejście w tryb wstawiania lub wyłączenie autoindent.
Oczywiście, jeśli pracujesz zdalnie (na przykład konsola przez SSH), to nie zadziała i powinieneś przejść :set noai
, tryb wstawiania, wklejanie do konsoli, pozostawić insertmode, :set ai
trasę, jak opisano w innym miejscu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-05 07:45:24
Użytkownicy komputerów Mac mogą uniknąć automatycznego formatowania, czytając bezpośrednio z tablicy za pomocą:
:r !pbpaste
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-28 12:58:25
Oto post autorstwa kogoś, kto wymyślił, jak zmapować Zdarzenie wklejania, aby automatycznie włączyć tryb wklejania, a następnie wyłączyć. Działa u mnie w tmux/iTerm na MacOSX.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-08 20:30:22
Podczas gdy ustawienie trybu wklejania za pomocą paste/nopaste/pastetoggle
jest całkowicie w porządku, nadal musisz ręcznie włączyć tryb wklejania przed wklejeniem i wyłączyć tryb wklejania po wklejeniu. Będąc leniwą osobą, którą jestem, poniżej znajduje się najlepsze rozwiązanie, jakie do tej pory znalazłem, które automatycznie przełącza tryb wklejania podczas wklejania.
Oto mała sztuczka, która wykorzystuje tryb wklejania w terminalu do automatycznie ustawia / wyłącza tryb wklejania Vima podczas wklejania. Put following w Twoim .vimrc:
let &t_SI .= "\<Esc>[?2004h" let &t_EI .= "\<Esc>[?2004l" inoremap <special> <expr> <Esc>[200~ XTermPasteBegin() function! XTermPasteBegin() set pastetoggle=<Esc>[201~ set paste return "" endfunction
Teraz możesz wkleić bez włączania/wyłączania trybu wklejania - jest to obsługiwane automatycznie dla Ciebie.
Source: Coderwall
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-08 04:00:35
Dodaj to do swojego ~/.vimrc
, a będziesz musiał nacisnąć F2 przed i po wklejeniu:
set pastetoggle=<F2>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-22 17:27:05
Właśnie wkładam set clipboard=unnamed
do mojego .vimrc. To sprawia, że domyślny bufor wklejania mapuje do schowka X.
Więc, jeśli zaznaczę kawałek tekstu w terminalu, mogę po prostu nacisnąć p
, aby wkleić go do Vima. Podobnie, mogę wkleić rzeczy w Vimie (np. YY
aby wkleić bieżącą linię do bufora) i kliknąć środkowym przyciskiem w dowolnym oknie, aby wkleić ją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-20 11:15:37
Podczas pracy wewnątrz terminala wtyczka vim-bracketed-paste vim automatycznie obsłuży pasty bez konieczności naciśnięcia klawiszy przed lub po pastie.
Działa poprzez wykrywanie bracketed paste mode, który jest sekwencją ucieczki wysyłaną przez "nowoczesne" terminale kompatybilne z terminalami x-term, takie jak iterm2, gnome-terminal i inne terminale używające libvte. Jako dodatkowy bonus działa również dla sesji tmux. Używam go z powodzeniem z iTerm2 na Macu łączącym się z Linuksem serwer i korzystanie z tmux.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-09 03:53:21
Włóż to do swojego~/.vimrc i bądź szczęśliwy:
" enables :Paste to just do what you want
command Paste execute 'set noai | insert | set ai'
Edit: po namyśle, :r !cat
jest o wiele lepszym podejściem, ponieważ jest krótkie, semantyczne i nie wymaga niestandardowego vimrc. Użyj tego zamiast tego!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-09 21:21:59
To działa dla mnie (case for + register, what i use like exchange buffer between aps):
imap <silent> <S-Insert> <C-O>:set noai<CR><C-R>+<C-O>:set ai<CR>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-01 15:53:47
Chociaż :pastetoggle
lub :paste
i :nopaste
powinny działać dobrze (jeśli są zaimplementowane-nie zawsze są, jak widać z dyskusji) Gorąco polecam wklejanie przy użyciu bezpośredniego podejścia "+p
lub "*p
i czytanie z "+r
lub "*r
:
Vim ma acess do dziesięciu typów rejestrów (:help registers
) i pytający jest zainteresowany quotestar
i {[10] } z sekcji
- Selection and drop registers
"*
,"+
oraz " ~Użyj tych rejestrów do przechowywania i pobieranie zaznaczonego tekstu dla GUI. Zobacz
quotestar
iquoteplus
. Gdy Schowek nie jest dostępny lub nie działa, zamiast tego używany jest rejestr bez nazwy. Dla systemów Unix Schowek jest dostępna tylko wtedy, gdy dostępna jest funkcja +xterm_clipboard. {Nie w Vi}Zauważ, że istnieje tylko rozróżnienie między "* i " + dla Systemów X11.
:help x11-selection
dodatkowo wyjaśnia różnicę *
i +
:
quoteplus quote+
Są trzy udokumentowane x selekcje: PRIMARY (co oczekuje się reprezentują bieżący wybór wizualny - jak w trybie wizualnym Vima), wtórny (który jest źle zdefiniowany) i schowka (który ma być używany do operacje wycinania, kopiowania i wklejania).
Z tych trzech, Vim używa PRIMARY podczas odczytu i zapisu "* register (stąd, gdy dostępne są wybory X11, Vim Ustawia domyślną wartość dla 'schowek ' z" autoselect"), oraz schowek podczas odczytu i zapisu" + Zarejestruj się. Vim nie ma dostępu do selekcji wtórnej.
Przykłady: (przyjmując domyślne wartości opcji)
Wybierz adres URL w trybie wizualnym w Vimie. Przejdź do przeglądarki i kliknij środkowy przycisk myszy w polu tekstowym URL. Wybrany tekst będzie wstawione (mam nadzieję!). Uwaga: w Firefoksie można ustawić middlemouse.contentloadurl preferuje true W about: config, wtedy wybrany adres URL zostanie użyty po naciśnięciu środkowego przycisku myszy w większości miejsca w oknie.
Zaznacz tekst w przeglądarce, przeciągając myszką. Przejdź do Vim i naciśnij środkowy przycisk myszy: zaznaczony tekst zostanie wstawiony.
- Wybierz jakiś tekst w Vimie i zrób " + y. idź do przeglądarki, wybierz jakiś tekst w pole tekstowe przeciągając myszką. Teraz użyj prawego przycisku myszy i wybierz "Wklej" z menu podręcznego. Zaznaczony tekst jest nadpisywany przez SMS od Vim. Zauważ, że tekst w " + rejestr pozostaje dostępna podczas tworzenia wizualnej zaznaczenie, co sprawia, że inny tekst jest dostępny w rejestrze"*. To pozwala nadpisanie zaznaczonego tekstu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-18 06:20:48
Jeśli jesteś na komputerze mac, macvim wydaje się obsługiwać go dobrze bez konieczności przełączania wklejania.
Brew install macvim --override-system-vim
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-18 14:05:27
Przeczytaj ten artykuł: Włącz automatyczne wcięcia dla wklejania kodu
Niektórzy ludzie lubią wizualną informację zwrotną pokazaną w linii statusu za pomocą następującej alternatywy dla twojego
vimrc
:
nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 11:18:44
Najszybszym sposobem, jaki znam, aby szybko przejść do trybu wklejania-wstawiania dla jednorazowej pasty, jest tpope unimpaped , który zawiera yo
oraz yO
, prawdopodobnie mnemotechnika "otwierasz". Są one udokumentowane tylko w jego vimdoc, jako:
Przełącznik nie został zapewniony dla 'wklej', ponieważ typowy przypadek użycia owijanie pojedynczej wkładki jest tak marnotrawne: przełączasz się dwa razy, ale wklejasz tylko raz (YOPO). Zamiast tego Naciśnij yo lub yO, aby wywołać o LUB O z 'wklej' już ustawione. Opuszczenie trybu wstawiania automatycznie ustawia "nopaste".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-13 21:00:21
Innym sposobem na wklejenie jest <CR>
i upuszczenie zawartości rejestru (tutaj rejestr globalny). Zobacz: :h i_ctrl-r
i h i_CTRL-R_CTRL-O
.
Z dokumentacji pomocy vim:Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse<MiddleMouse>. Does not replace characters! The '.' register (last inserted text) is still inserted as typed.{not in Vi}
Aby wkleić zawartość do Vima bez automatycznego wcięcia, użyj <CR><CO>*
w większości systemów uniksowych.
Uwaga: działa tylko wtedy, gdy Vim jest kompilowany z clipboard
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-16 11:17:37
Niestety znalazłem wspomnianą wtyczkę vim, która nie działa z iTerm2 3.0.15 ( szczerze mówiąc Nie wiem, czy zepsuła się na starszych wersjach) - ale znalazłem ten hack zamiast.
Map command-p do wklejania i używania klawiszy iterm2 vim. Oczywiście działa to tylko dla iTerm2.
Jak to działa. Używam "jk", aby wejść w tryb escape, więc będziesz również potrzebował:
: inoremap jk
W Twoim .vimrc.
Następnie po prostu wywołuje P, aby wejść w tryb wklejania, " +p, aby wkleić ze schowka a następnie P, aby wyłączyć tryb wklejania. hth.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 01:05:46
From vim: ]p
Z zewnątrz: "*]p
lub "+]p
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-22 17:07:43