Talán a legtöbben a VS Code-ot használják, emiatt ezen mutatom be a kérdésemet.
Ott egyrészt van a Shift-Alt-Up/Down, amivel egymás alatt, folytatólagosan lehet több kurzort megadni, és ezután azonos módon szerkeszteni a sorokat. Ez használható lenne ezen sorok ki-bekommentelésére, ha erre nem lenne külön billentyűkombináció, illetve én még használtam sorközepi rendezgetésre, amikor táblázat-jellegű szövegfájlom volt.
Ez jól működik a sorok elején, vagy azok közepén, de nem várható el, hogy minden sor egyforma hosszú legyen. Ezért van egy másik kombináció: a Shift+Alt+I, ami a kijelölt régió összes sorának végére rak egy kurzort, így az esetlegesen elfelejtett összes pontosvesszőt egyszerre pótolhatjuk. Bár van annyira értelmes a Code, ha például a sor elején adottak a kijelöléseink, akkor az End megnyomása után a sorok végére kerülnek ezek a kurzorok, azaz ezzel kiváltható ez a kombináció.
Másrészt van egy Shift-Ctrl-L, amivel az aktuális szó összes előfordulása után rak egy kurzort. Ez felhasználható refaktorálásra, azaz azonosítók átnevezésére. Ha ezt lokalizálni szeretnénk, arra a Ctrl-D használható, ami az adott szó soron következő előfordulása után rak egy kurzort. Amivel nekem ezzel problémám van, hogy nem látom, hogy igény szerint hogyan hagyható ki egy adott előfordulás.
A vim-es csere az utóbbit triviális módon ki tudja váltani, A megfelelő régió megadásával lehet választani a globális illetve lokális csere között. Az "egymás alatti" kurzorokat - főleg ha a sorok elején vagy végén akarunk változtatni - akkor viszonylag egyszerűen kiválthatjuk vim cserével. Ha már egy kicsit beljebb változtatnánk a sorokon, akkor nem árt ha tisztában vagyunk a reguláris kifejezésekkel és a visszahivatkozásokkal. Ennél még talán az is jobb, ha gyorsan rögzítünk egy makrót a változtatásról, figyelve arra, hogy könnyen ismételhető legyen.
Tehát a kérdésem az lenne, ki hogyan és mire használja a többszörös kurzort vagy többszörös kijelölést? Előre is köszönöm!
- AszaltSzilva blogja
- A hozzászóláshoz be kell jelentkezni
- 633 megtekintés
Hozzászólások
Én leginkább Helix editort használok, ott tetszőlegesen sok kijelölés lehet és mindegyik módosítható, így annyi kurzor is lehet. A kijelölések megadására rengeteg lehetőség van.
Egyébként a Vim-hez is van plugin: vim-visual-multi.
Vim esetén én is leginkább a keresés/csere és a makró megoldásokat használom.
A keresés/cserét sokszor nem :s-sel hanem úgy, hogy rákeresek az adott cserélendőre, átírom, majd n(ext), majd újra alkalmazás (.) Ilyenkor könnyebb szelektíven.
- A hozzászóláshoz be kell jelentkezni
Köszönöm! Mivel időről-időre be kell lépnem ssh-val a különféle szenzorokkal telepakolt labor-szerverre, a vim-et szeretem egy eldugott minimalista vimrc-vel használni, hogy a többieknek ne kavarjak be. Emiatt plugin-okat sem igazán használok vim alatt. A Kakoune/Helix vonalat azért kerülöm, mert a szerverre ezek biztos nem fognak felkerülni, az ide-oda váltás köztük, meg a vi/vim között elég körülményes vén fejjel.
Napjaimat többnyire a vis-sel töltöm, ahol sam örökség miatt ajándékba kaptam a multi-kurzort, kicsit általánosabb formában mint amit VS code nyújt, használom is; de úgy érzem, nem használtam még ki a lehetőségeit. Mivel ennek a szövegszerkesztőnek a másik szülője a vi (és nem a vim), nem esek ki a vim-es gyakorlatból sem 😏.
AL
- A hozzászóláshoz be kell jelentkezni
az ide-oda váltás köztük, meg a vi/vim között elég körülményes vén fejjel
Én is vén fejjel ismerkedtem meg vele, használom mind a kettőt, munkában vim, otthon helix. Nem olyan nagy kaland váltani köztük.
- A hozzászóláshoz be kell jelentkezni
A gyűrűsujjamban ott van a vi/vim féle karakter törlése, csinálom gondolkodás nélkül. Ha a Helix-ben az x-et lenyomom, akkor kijelöli az aktuális sort. Talán ez fáj legjobban. Másrészt véremmé vált a vi-nyelvtan, és nem tudok átszokni a kijelölöm, aztán majd csinálok vele valamit sorrendhez. (Pedig próbáltam eleget, végigdolgoztam napokat a Helix-szel, de valahogy nem vált kényelmessé.) Tudom, egyes mérések szerint a vim-golfban a Helix a nyerő, de nekem a vi* használata már gondolkodás nélkül megy.
AL
- A hozzászóláshoz be kell jelentkezni
Néha van úgy, hogy többféle szövegkörnyezetbe kell ugyanazt a szövegrészletet begépelni, ilyenkor a multi-cursor nagy segítség. phpStormban használom.
A magyar ember jelképe a hátrafelé nyilazás. Vakon rohanunk a semmibe, miközben a múltunkat támadjuk.
- A hozzászóláshoz be kell jelentkezni
Egyszerű példa, AWS CloudWatch Logs Insightsban így használom. Tegyük fel van két log group egy servicehez, az egyikben request logok vannak, a másikban részletes alkalmazás logok. Szeretném néhány sikertelen request logjait megnézni, hogy jobban megértsem, mi történt.
Először futtatok egy CWL queryt a request logokon, pl.:
fields @timestamp, RequestId, ExceptionMessage
| filter ApiId = "SomeApi" and ResponseCode = 500Az eredményt kimásolom CSV formátumban, majd írok egy új queryt és bemásolom a CSV-t:
fields @timestamp, @message
| filter
@timestamp,RequestId,ExceptionMessage
2026-02-18T10:20:30Z,c5111b3a-e45d-452c-9c55-34f755a6787b,"InternalServerError: Failed to execute query ..."
2026-02-18T11:21:31Z,4ec7a1b9-d89c-48ed-aafe-5100e2b09ddf,"InternalServerError: Failed to establis connection to ..."
2026-02-18T12:22:32Z,8a89775a-f73a-41e9-b3ff-2d06b9040475,"InternalServerError: Connection reset"
2026-02-18T13:23:33Z,6b691ab7-4dc8-4190-a192-7c6965f17152,"InternalServerError: Failed to execute query ..."
2026-02-18T14:24:34Z,4954c127-0af2-4039-8e58-863e2069d9d3,"InternalServerError: Connection reset"Tegyük fel a 2., 3. és 5. request részletei érdekelnek. Kitörlöm az irreleváns sorokat, majd Alt + Shift-tel csinálok egy függőleges kijelölést a sor elején (a > reprezentálja a kurzor pozícióját):
fields @timestamp, @message
| filter
>2026-02-18T11:21:31Z,4ec7a1b9-d89c-48ed-aafe-5100e2b09ddf,"InternalServerError: Failed to establis connection to ..."
>2026-02-18T12:22:32Z,8a89775a-f73a-41e9-b3ff-2d06b9040475,"InternalServerError: Connection reset"
>2026-02-18T14:24:34Z,4954c127-0af2-4039-8e58-863e2069d9d3,"InternalServerError: Connection reset"Alt + Shift + → segítségével kijelölöm a timestampeket és az első vesszőt, majd beírom a feltétel elejét:
fields @timestamp, @message
| filter
@message like ">,4ec7a1b9-d89c-48ed-aafe-5100e2b09ddf,"InternalServerError: Failed to establis connection to ..."
@message like ">,8a89775a-f73a-41e9-b3ff-2d06b9040475,"InternalServerError: Connection reset"
@message like ">,4954c127-0af2-4039-8e58-863e2069d9d3,"InternalServerError: Connection reset"Alt + → segítségével elnavigálok a második vesszőig, majd beírok még egy " karaktert:
fields @timestamp, @message
| filter
@message like "4ec7a1b9-d89c-48ed-aafe-5100e2b09ddf">,"InternalServerError: Failed to establis connection to ..."
@message like "8a89775a-f73a-41e9-b3ff-2d06b9040475">,"InternalServerError: Connection reset"
@message like "4954c127-0af2-4039-8e58-863e2069d9d3">,"InternalServerError: Connection reset"Eggyel jobbra lépek, Shift + End segítségével kijelölöm a sorok végét, majd beírom a logikai operátort:
fields @timestamp, @message
| filter
@message like "4ec7a1b9-d89c-48ed-aafe-5100e2b09ddf" or>
@message like "8a89775a-f73a-41e9-b3ff-2d06b9040475" or>
@message like "4954c127-0af2-4039-8e58-863e2069d9d3" or>Végül → segítségével megszüntetem a többsoros kijelölést, ezzel a kurzor az utolsó sor végére kerül. Ezután kitörlöm a felesleges logikai operátort. A végső, futtatható query így néz ki a kurzorpozícióval:
fields @timestamp, @message
| filter
@message like "4ec7a1b9-d89c-48ed-aafe-5100e2b09ddf" or
@message like "8a89775a-f73a-41e9-b3ff-2d06b9040475" or
@message like "4954c127-0af2-4039-8e58-863e2069d9d3">Ez nagyon gyorsan megy, pár másodperc kell csak hozzá, a billentyűkombinációk izommemóriából jönnek. Biztos megoldható replace-szel is, de kétlem, hogy gyorsabban meg lehetne oldani vele.
- A hozzászóláshoz be kell jelentkezni
Nagyon szépen köszönöm! Ad-hoc megoldásnak tökéletes!
Ha már többször lenne rá szükség, akkor bennem megszólalna a kisördög, hogy automatizáljuk! Mindenkinek más az eszközkészlete, nekem az awk jutott elsőnek az eszembe – egy időben nagyon ráfüggtem, még CGI-s webszervert is írtam benne, csak nem mindig akart működni –, másodjára viszont a cut, amit a napokban szerkesztgetett bash script-ek tartalmaztak. Sőt mivel most az fzf körül forog az agyam, lehet hogy a sorokat azzal választanám ki, s teljesen kihagynám a szövegszerkesztőt a parancs létrehozásából.
AL
- A hozzászóláshoz be kell jelentkezni
A VIM-es megoldás sem sokkal macerásabb:
- Kitörlöd a fölös sorokat, első soron állsz
- SHIFT-I (sor elejére lép és beszúró üzemmódba), majd kitörlöd a fölösleges dolgokat és beírod a @message like " -ot, majd ESC.
- Lefelé nyíl, majd ismétlés (pont) kétszer.
- Vesszőre lépés (f,), majd SHIFT-C (kitörli onnantól a sor végéig, majd beszúró üzemmódba lép)
- beírod az "-t
- Felfelé nyíl, majd újra a 4-es pont
- beírod az " or-t
- Felfele nyíl, majd ismétlés (pont) kétszer.
Vagy makróval:
- Kitörlöd a fölös sorokat, első soron állsz
- Belépsz makró rögzítésbe, az a regiszterbe mented (qa)
- SHIFT-I (sor elejére lép és beszúró üzemmódba), majd kitörlöd a fölösleges dolgokat és beírod a @message like " -ot, majd ESC.
- Vesszőre lépés (f,), majd SHIFT-C (kitörli onnantól a sor végéig, majd beszúró üzemmódba lép)
- beírod az " or-t
- Lefelé nyíl
- Lezárod a makrót (q)
- Futtatod a többi soron: 2@a
Ebben az a szép, hogy ha 200 soron kell, akkor annyi a változás, hogy 200@a -t írsz a végén.
Illetve ezt a makrót el is mentheted és bármikor futtathatod. ;-)
- A hozzászóláshoz be kell jelentkezni
Én ezt inkább vi megoldásnak nevezném, mert szerintem ott is működőképes.
Vim esetén a visual block mode lehet inkább opció, annál a sor elején kell egy karakter széles oszlopot kijelölni, majd jöhet az f, és a d - ezzel törölhető kezdeti szakasz, vagy a Shift-I, és az adott sorban begépelt részt automatikusan végrehajtja a többin is, stb.
Szerintem az a kérdés, kinek milyen az absztrakciós képessége, mennyire képes átlátni egy makrót, és úgy megírni, hogy az megismételhető legyen, vagy mennyire szükséges a vizuális visszajelzés, amit a visual block, vagy a multi-kurzor képes megadni. Teljes mértékben megértem ha valaki a munkanap végén az utóbbira támaszkodik, vagy nem akar elmélyülni egy vi bonyolultságú programban.
AL
- A hozzászóláshoz be kell jelentkezni
VIM-ben évek óta létezik a Ctrl+V intézménye, ami szintén multikurzor.
- A hozzászóláshoz be kell jelentkezni
az box selection.
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
Nem csak, tudsz multi-insertet is vele. Ha Ctrl-V -vel kijelölsz egy 1 karakter széles oszlopot, majd nyomsz egy Insertet, és beírsz valamit, ESC után beírja abba a lokációba mindenhova máshova.
Igen, technikailag nem multikurzorként jelenik meg, de úgy viselkedik.
- A hozzászóláshoz be kell jelentkezni
azt nehez multicursornak csufolni, hiszen minden egyes sorra elvegzi az editet. A multicursornak meg pont az a lenyege, hogy random helyen van, nem pedig egymasra rakovetkezo sorokban.
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
ezzel az a baj, hogy semmit se szabad elutnod. Azaz, amikor a pont-tal ismétled, de előtte észrevetted hogy egy karaktert elütöttél, és visszajavítottad, akkor az egész pont borul.
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
Amíg beszúrás üzemmódban vagy, addig annyiszor ütsz el, amennyiszer csak akarsz, visszajavíthatod, újra elütheted, még vissza is mozoghatsz, meg előre. ;-)
- A hozzászóláshoz be kell jelentkezni
VS Code-ban bemutatnálak még urunknak és megváltónknak, a Ctrl+D kombinációnak. Ez, ha egy kifejezésre ráállsz, sorban egyesével elkezdi lefelé kijelölni az összes hasonlót. Így marha gyorsan lehet pl változókat átnevezni, de lényegében bármilyen kifejezést átírni, mert nem csak változókra jó.
Nálam pl most volt egy olyan példa, hogy 3 hasonló nevű (ize-manager, ize-agent, ize-hoze) csomagra kellett versionlock-ot rakni, meg ellenőrizni, hogy rajta van-e más verzióval, stb. Megcsináltam az egyikre a blokkot, lemásoltam még kétszer, ráálltam a következő blokk elejére, ott Ctrl+D-vel végigmentem a blokkon, átírtam a megfelelő részt, utána mentem a következő blokkra, ott is átírtam. Ha copy-paste kódolni kell (mert nincs igény szofitsztikáltabbra, vagy mert csak a váz ugyanaz, de a beltartalom más lesz) akkor marha gyors tud ez is lenni.
- A hozzászóláshoz be kell jelentkezni
Ma megint tanultam valamit!
Kocaprogramozokent codiumban mar hasznaltam a tobb kurzort es kijelolest (Flutter, class template atnevezese). De ekkor automatikus a kijeloles, nekem csak gepelnem kell.
Meg is nyomtam, es lett tobb kurzor. Hogy hova nem fejlodott mar a tudomany az Error 23: ";" expected uzenetek ota!
- A hozzászóláshoz be kell jelentkezni
Ezt ismerem, említettem is a blogbejegyzésében. Amíg le kell cserélni minden előfordulást egy adott blokkban, addig tökéletes is. Ha egy-két előfordulást ki kell hagyni, akkor már körülményesebb. Nem próbáltam, de talán a Sublime Text esetén át lehet lépni előfordulásokat, ahogy a vis esetén is.
Köszönöm a példa leírását!
AL
- A hozzászóláshoz be kell jelentkezni