Am'd place să inserați smuls text în Vim linie de comandă. Este posibil?
Da. Hit Ctrl-R apoi ". Dacă aveți literal caractere de control în ceea ce ai smuls, folosi Ctrl-R, Ctrl-O, ". Aici este o explicație a ceea ce puteți face cu registre. Ce poți face cu registre este extraordinar, și o dată ce știi cum să le folosească nu poți trăi fără ele. Registrele sunt de fapt locurile de depozitare pentru siruri de caractere. Vim are multe registre care lucrează în moduri diferite:
0
(yank înregistra: când utilizați " y " în mod normal, fără a preciza un registru, smuls de text se duce acolo și, de asemenea, default registru), 1
la 9
(schimbarea șterge registrele, atunci când utilizați comenzi cum ar fi " c " sau "d", ceea ce a fost șters, merge să se înregistreze 1, ce a fost în registru 1 merge la registrul 2, etc.), "
(default înregistra, de asemenea, cunoscut sub numele de anonim registru. Acest lucru este în cazul în care " vine Ctrl-R, "), _
(faptele apostolilor ca /dev/null
(Unix) sau NUL
(Windows), puteți scrie la el, dar l's aruncate și atunci când ai citit din ea, este întotdeauna gol), -
(mici șterge registru), /
(căutare model de registru, actualizat atunci când te uiți pentru text cu/
, ?
, *
sau #
de exemplu, puteți scrie, de asemenea, să-l pentru a modifica dinamic model de căutare), :
(magazine ultimul VimL tastat comanda prin Q
sau :
, readonly), +
și *
(clipboard sistem de registre, puteți să le scriu să setați clipboard și citi conținutul clipboard de la ei)
Vezi:a ajuta registrele de referință completă.
Puteți, în orice moment, utilizați :registre
pentru a afișa conținutul tuturor registrelor. Sinonime și shorthands pentru această comandă sunt:display,
:reg "și": di. În a Introduce sau în modul linie de Comandă, <kbd>Ctrl</kbd>-<kbd>R</kbd> plus un registru numele, insertii conținutul acestui registru. Dacă doriți să introduceți-le la propriu (nu auto-crestarea, nici o conversie de caractere de control ca
0x08 să backspace, etc), puteți utiliza Ctrl-R, Ctrl-O, înregistra numele.
Vezi:a ajuta i_CTRL-R` și alineatele următoare pentru mai multe informații.
Dar puteți, de asemenea, face următoarele (și, probabil, am uitat de multe utilizări pentru registre). " este un mod Normal de comandă care vă permite să selectați ce registru este de a fi utilizate în următoarea smulge, să ștergeți sau paste. Deci <kbd>"</kbd><kbd>:</kbd> selectează colon registru (stocarea ultima comanda). Apoi <kbd>p</kbd> este o comandă știți deja, acesta paste conținutul registrului. cf.
:ajutor ",
:ajuta quote_:` .vimrc
) și-ar dori pentru a executa o serie de linii consecutive chiar acum: yj:@"Enter.
Aici, yj americanii curent și linia următoare (acest lucru este pentru că j este un linewise mișcare, dar aceasta este în afara domeniului de aplicare a acestui răspuns) în default registru (de asemenea, cunoscut sub numele de anonim registru). Apoi,: @
Ex de comandă joacă Ex comenzi stocate în registrul dat ca argument, și "
e ce te referi anonim registru. De asemenea, a se vedea partea de sus a acest răspuns, care este legat.
A nu se confunda "
folosit aici (care este un registru numele) cu " din exemplul anterior, care a fost un Normal-modul de comanda. cf.
:ajutor: @ "și": ajuta quote_quote` :ajuta quote_/
, ajutor i_CTRL-R
Corolar: Păstrați model de căutare, dar se adaugă o alternativă: /
Ctrl-R, / \|alternative
. :pu
. Aceasta este o prescurtare pentru :pune "
. A: - a pus comanda, ca multe Ex comenzi, funcționează numai linewise. cf.
:ajuta :pune Ai putea, de asemenea, s-au făcut:
:apel setreg('"', @", 'V'), apoi pe
p. Anii
setreg funcția setează registrul de care nume este dat ca prim argument (ca un șir de caractere), inițializează cu conținutul celui de-al doilea argument (și puteți utiliza registre ca variabile cu numele @x unde " x "este numele de registru în VimL), și transformă-l în modul specificat în cel de-al treilea argument," V " pentru linewise, nimic pentru characterwise și literal
^Vpentru blockwise. cf.
:ajuta setreg(). Invers funcții sunt
getreg () " și " getregtype()`. qa
...q", apoi": echo @un
vă va spune ceea ce ați tastat, și @o
va reda macro (probabil stiai asta, foarte util, în scopul de a evita sarcini repetitive)
cf. :ajuta q
, ajutor @
Corolarul din exemplul anterior: Dacă ai 8go în clipboard, apoi @+
va juca conținutul clipboard ca un macro, și, astfel, du-te la al 8-lea octet din fișier. De fapt, acest lucru va lucra cu aproape orice registru. Dacă ultima inserează șirul s dd
în modul Inserare, apoi @.
va (deoarece .
registrul conține, ultimul introdus string) șterge o linie. (Vim documentația este greșit în această privință, deoarece afirmă că registrele#
, %
, :
și .
va lucra numai cu "p", "P",: pune
și Ctrl-R).
cf. :ajutor @
Don't confunda :@
(comandă care joacă Vim comenzi dintr-un registru) și @
(normal-modul de comanda, care joacă normal-modul de comenzi dintr-un registru).
O excepție notabilă este @:
. Comanda registru nu conține inițial de colon și nici nu conține final de retur. Cu toate acestea, în mod Normal, @:
va face ceea ce te astepti, interpretarea se înregistreze ca un Ex de comandă, nu încearcă să-l joace în modul Normal. Deci, dacă ultima comandă a fost :e
, registrul conține " e " dar @:
va reîncărca fișierul, nu merge la sfârșit de cuvânt.
cf. :ajutor @:
@='dd'
Enter. Cât de repede te-a lovit =
cheie, Vim comută la expresia de evaluare: pe măsură ce introduceți o expresie și a lovit Enter, Vim calculează, iar rezultatul acționează ca un registru de conținut. Desigur registrul =
este read-only, si one-shot. De fiecare dată când începe să utilizați-l, va trebui să introduceți o expresie nouă.
cf. :ajuta quote_=
Corolar: Dacă editați o comandă, și îți dai seama că nu ar trebui să nevoie pentru a introduce în linia de comandă niște linie de curent tampon: don't apăsați Esc! Folosi Ctrl-R =getline(58)
Enter. După ce că va fi înapoi la linia de comandă de editare, dar nu a introdus conținutul 58 linie. :să @/ = 'foo'
cf. :ajutor :lasa
Rețineți că a face asta, ai nevoie de't să scape /
în model. Cu toate acestea aveți nevoie pentru a dubla toate singur citate de curs. qaq
(resetează o registrul stocarea o macrocomandă goală în interior), :g/^foo/y O
, :g/bar/y O
, :să @+ = @o
.
Folosind un capital înregistra nume registru de lucru în modul de adăugare
Mai bine, dacă " Q " nu a fost remapate de mswin.vim
, începe modul Ex cu "Q", lanțul de cei "colon comenzi", care sunt, de fapt, mai bine numit "Ex comenzi", și du-te înapoi la modul Normal prin tastarea "vizual".
cf. :ajutor :g
, :ajutor :y
, :ajuta Q
:g/^/pune -_
. Acest lucru pune conținutul de gaura neagră registru (gol, atunci când citesc, dar de scris, se comportă ca /dev/null
) linewise, după fiecare linie (pentru fiecare linie are un început!). :g/^/-pune ='foo'
. Aceasta este o utilizare inteligentă de exprimare registru. Aici, -
este un sinonim pentru .-1
(cf. :ajutor :gama
). Din `:pune pune textul după linie, aveți pentru a spune în mod explicit să acționeze pe cel anterior. :%y+
.
cf. :ajutor :gama
(pentru %
parte) și :ajutor :y
. :să @a='
Ctrl-R =replace(@o,"'","''",'g')
Enter '
și editați-l. Acest lucru va modifica conținutul de macro stocate în registru "a", și-l's a arătat aici cum puteți utiliza expresia înregistrați pentru a face asta. dddd
, s-ar putea face uu
în scopul de a anula. Cu " p " ai putea obține trecut șters de linie. Dar, de fapt, puteți recupera, de asemenea, de până la 9 șterge cu registrele @1
prin @9
.
Chiar mai bine, dacă ai face"1P", apoi". în mod Normal va juca "2P
, și așa mai departe.
cf. :ajutor . "și": ajuta quote_number
=strftime('%y%m%d')
Enter.
cf. :ajuta strftime()
Încă o dată, ceea ce poate fi confuz: :@
este o linia către de comandă care interpretează conținutul unui registru ca vimscript și surse @
în modul normal de comandă care interpretează conținutul unui registru normal-modul de intrarile de la tastatura (cu excepția cazului când utilizați :
registru, care conține jucat ultima comanda fara inițială de colon: în acest caz se repetă comandă, dacă aveți, de asemenea, re-introduce în colon și întoarcerea finală cheie). "am'd place să inserați smuls text în Vim linia de comandă."
În timp ce partea de sus a votat răspunsul este foarte complet, prefer editare comanda de istorie.
În mod normal, de tipul: i:
. Acest lucru vă va oferi o listă a celor mai recente comenzi, editabil și căutate cu normal vim comenzi. Te'll începe pe un gol în linia de comandă în partea de jos.
Pentru exact lucrul pe care articolul întreabă, lipind-o tras linie (sau smuls ceva) într-o linie de comandă, smulge textul și apoi: q:p
(a intra în istorie de comandă în modul de editare, și apoi (p)ut ta a smuls text într-o nouă linie de comandă. Edit la va, enter pentru a executa.
Pentru a ieși din comandă modul de istorie, l's a opus. În modul normal în istorie de comandă, de tip: :q
+ enter
Pentru lipirea ceva din sistemul clipboard în vim linie de comandă ("comanda mode"), utilizați Ctrl+R urmat de +. Pentru mine, cel puțin pe Ubuntu, Schimbare+Ins nu este de lucru.
PS: Nu sunt sigur de ce Ctrl+R urmat de *, care este, teoretic, la fel ca Ctrl+R urmat de + nu't par să funcționeze întotdeauna. Am căutat și descoperit + versiune și se pare că funcționează întotdeauna, cel puțin pe cutia mea.
L's demn de remarcat, de asemenea, că yankeul registre sunt la fel ca macro tampoane. Cu alte cuvinte, puteți scrie pur și simplu întreaga comandă în document (inclusiv lipite fragment), apoi "de
a o smulge de la " b " registru, și apoi rulați-l cu @b
.
Am avut o problemă similară. Am vrut ca textul selectat să ajung într-o comandă, dar nu se bazează pe lipire în. Aici's comanda am fost încercarea de a scrie o cartografiere pentru:
:call VimuxRunCommand("python")
Docs pentru acest plugin arata doar folosind șir de caractere literale. Următoarele va rupe dacă încercați să selectați text care conține doublequotes:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Pentru a obține în jurul valorii de acest lucru, tocmai de referință conținutul de macro folosind @
:
vnoremap y:call VimuxRunCommand(@")<cr>
Trece conținutul anonim înregistra și funcționează cu dublu citat și multilinie edgecases.
OSX
Dacă sunteți folosind vim în MAC OSX, din păcate, acesta este dotat cu mai vechi verion, și nu s-a conformat clipboard opțiuni. Din fericire, homebrew poate rezolva cu ușurință această problemă.
instalați vim:
`fiertură de a instala vim-cu-lua-cu-override-sistem-vi``
instala gui verion de vim:
`fiertură de a instala macvim-cu-lua-cu-override-sistem-vi``
reporniți terminalul să aibă efect.
adăugați următoarea linie la ~/.vimrc
`set clipboard=anonim``
acum puteți copia linie în vim cu yy
și lipiți-l la nivel de sistem.
această întrebare este destul de vechi, dar din moment ce a fost vizionat de atât de multe ori, pare a fi popular - am'll a pus asta aici pentru posteritate. pentru context, această informație vine de la out-of-the-box, nu plugin-uri, nu .vimrc vim 7.4 comportament în linux mint cu opțiunile implicite.
puteți selecta textul cu mouse-ul (sau folosind V sau v și plasarea de selecție în "* înregistrare), și lipiți-l în linia de comandă cu SHIFT-CTL-v.
tastarea CTL-r în linia de comandă va provoca un prompt pentru a înregistra numele. deci tastarea :CTL-r se va plasa conținutul registrului în linia de comandă. se va lipi orice registru, nu doar "*. a se vedea :ajuta c_CTRL-R .
în plus, butonul mouse-ului mijloc va inserați codul în linia de comandă. a se vedea :ajutor->cita-plus pentru o descriere a cât de x11 ocupă cu selecția. chiar și într-o câmpie, afara-the-box vim (din nou, în vim 7.4 în linux mint, oricum), orice selecție făcută cu butonul mouse-ului pot fi lipite în linia de comandă cu butonul mouse-ului mijloc.
în plus, butonul mouse-ului mijloc va lipi, de asemenea, textul selectat în vim în multe alte x11, chiar gui (de ex., firefox, thunderbird) și lipirea de text în linia de comandă este, de asemenea, posibilă în cazul în care textul a fost selectat din alte aplicații.
a se vedea :ajutor->x11-selecție pentru pat suplim info.
tl;dr
încercați :CTL-r abordare în primul rând, apoi utilizați SHIFT-CTL-v sau butonul mouse-ului mijloc dacă ai nevoie de altceva.
este admis că acesta poate fi confuz.