Diktavimas, kuris atlaiko terminalą

Diktavimo įklijavimas tyliai žlunga terminaluose, SSH, tmux ir ne QWERTY išdėstymuose. Kodėl ten neveikia iškarpinė ir ką daro spausdinimo režimas.

Teodor Deleanu2026 m. liepos 10 d.Skaitymo laikas: 6 min.

Kūrėjai, bandantys diktavimo įrankius, dažnai atsitrenkia į labai konkrečios formos gedimą. Demonstracijoje įrankis veikia nuostabiai. Veikia Notes, Slack, naršyklėje. Tada sufokusuoji terminalą, padiktuoji sakinį, ir arba nieko neatsiranda, arba atsiranda kažkas, ko nesakei, arba atsiranda pusė, o kita pusė paslaptingai atsiduria iškarpinėje. Kartais lokaliai veikia ir miršta tą akimirką, kai per SSH prisijungi prie serverio.

Šablonas pakankamai nuoseklus, kad nemanyčiau, jog tai vieno konkretaus produkto klaida. Tai pasekmė to, kaip visa kategorija įterpia tekstą — ir jis lūžta būtent tose vietose, kuriose kūrėjas gyvena.

Dabar tai svarbiau nei prieš dvejus metus. Jei Claude Code vairuoji balsu — darbo eiga, kurią aprašiau straipsnyje Claude Code valdymas balsu — terminalas yra ne viena programa iš daugelio. Jis yra ta programa. Ten nusileidžia tavo promptai, ten agentai laukia nukreipimų, ten visas tas lygiagrečių juostų reikalas arba veikia, arba ne. Diktavimo įrankis, nepatikimas terminaluose, vibecoderiui yra nepatikimas ties vieninteliu savo darbu.

Kodėl įklijavimas lūžta būtent ten, kur gyvena kūrėjai

Štai kategorijos lygio mechanika. Dauguma diktavimo įrankių tekstą įterpia vienodai: padeda transkribuotą sakinį į sistemos iškarpinę, tada fokusuotoje programoje sintezuoja Cmd+V paspaudimą. Tai protingas numatytasis variantas — įklijavimas momentinis, veikia beveik kiekviename grafinės sąsajos teksto lauke ir beveik nereikalauja atskiro darbo kiekvienai programai.

Problema yra viskas, kuo ta prielaida tyliai remiasi.

Ji remiasi tuo, kad fokusuota programa Cmd+V supranta kaip „įklijuoti“. Terminalai dažnai to nedaro — daugelis Cmd+V naudoja kam kita arba niekam, tmux ir vim turi savo nuomonę, ką reiškia įklijavimas, o nuotolinė SSH sesija gali įklijuoto teksto pliūpsnį interpretuoti taip, kaip lokali mašina nenuspės. Bracketed paste, kopijavimo režimas, įterpimo režimas prieš įprastą: terminalų pasaulis pilnas būsenų, kuriose sintetinis įklijavimas nusileidžia ne ten arba niekur.

Ji remiasi tuo, kad iškarpinė pasiekiama ir nesaugoma. Iškarpinės tvarkyklės ją perrašo. Slaptažodžių tvarkyklės ją sąmoningai išvalo arba apsaugo — saugumo funkcija, paverčianti „įklijuok mano diktavimą“ į „neįklijuok nieko“, ir tyliai. O net kai viskas veikia, įrankis ką tik perrašė tai, ką buvai nusikopijavęs. Commit SHA, kurį nešiojaisi tarp langų, dingo, pakeistas tavo paties sakiniu. Kam nors, žongliruojančiam keliomis juostomis, tai ne smulkmena; iškarpinė dirbo darbą.

Ir ji remiasi — štai kas žmones nustebina — tavo klaviatūros išdėstymu. Kai įrankis pereina prie klavišų paspaudimų imitavimo, naivus būdas yra siųsti klavišų kodus: fizines klavišų pozicijas. Klavišų kodai į simbolius verčiami per tavo išdėstymą. QWERTY klaviatūroje „V“ kodas duoda V. Dvorak klaviatūroje ta pati fizinė pozicija yra kita raidė. Tad įrankis, imituojantis skenavimo kodus Dvorak, AZERTY ar Colemak išdėstyme, pagamina tekstą, atrodantį taip, tarsi būtų perleistas per keitimo šifrą. Naudotojai praneša apie abrakadabrą ir mano, kad nepavyko kalbos atpažinimas. Nepavyko ne jis — šneka buvo tobula, ją sujaukė įterpimas.

Tai nėra niekieno piktavališkumas ar tingumas. Įklijavimas iš iškarpinės yra teisingas numatytasis variantas 90 % atvejų. Tiesiog kūrėjai savo dieną praleidžia likusiuose 10 %.

Ką iš tikrųjų reiškia „vietoj to suspausdink“

Keebye turi nustatymą insert_mode su dviem reikšmėmis: paste, kuris yra numatytasis, ir type.

Spausdinimo režimas neįklijuoja. macOS sistemoje jis naudoja CGEventKeyboardSetUnicodeString — API, prisegantį tikrąjį Unicode tekstą prie sintetinio klavišo įvykio. Simbolis nešamas pačiame įvykyje, o ne ieškomas per tavo klaviatūros išdėstymą. Dėl to jis nepriklauso nuo išdėstymo iš prigimties: Dvorak, AZERTY, Colemak — kad ir kuo rašytum, atkeliauja būtent tas tekstas, kuris buvo transkribuotas, nes niekada nebuvo skenavimo kodo vertimo į simbolį, kuriame būtų galima suklysti.

Antroji spausdinimo režimo savybė yra ta, kuri rūpi terminalų naudotojams: jis niekada neliečia iškarpinės. Tame kodo kelyje nulis operacijų su iškarpine. Iškarpinės turinys lieka tavo — SHA išlieka, slaptažodžių tvarkyklė neturi nuo ko saugotis, iškarpinės tvarkyklė neturi ko įrašyti.

O kadangi terminalai ir nuotolinės sesijos gali užspringti tekstu, atkeliaujančiu greičiau, nei rašo bet kuris žmogus, spausdinimo režimas sąmoningai dozuoja save: tekstas eina 16 simbolių gabalais su 4 milisekundžių tarpais tarp jų. Pakankamai greitai, kad sakinys nusileistų gerokai greičiau nei per sekundę; pakankamai išmatuotai, kad tmux langas per SSH jį gautų kaip klavišų paspaudimus, su kuriais spėja, o ne kaip gumulą, kurį reikia interpretuoti.

Įklijavimo režimas niekur nedingo ir tebėra numatytasis, nes įprastose grafinėse programose jis tikrai greitesnis dideliems teksto blokams — trijų pastraipų Slack žinutė atkeliauja kaip vienas įklijavimas, o ne kaip gabalų srautas. Vis dėlto ir įklijavimo režimas pasimokė išdėstymų pamokos: sintetinis Cmd+V naudoja fizinį V klavišo kodą, tad pats įklijavimas ne QWERTY išdėstymuose nelūžta taip, kaip gali lūžti simbolių paieška grįsti metodai.

Praktinė sąranka darbui su agentais paprasta: perjunk insert_mode į type, sufokusuok terminalą, kuriame veikia Claude Code, laikyk klavišą, pasakyk nukreipimą, atleisk. Promptas atkeliauja taip, kaip atkeliautų klavišų paspaudimai, nes terminalui tai jie ir yra. Žingsnis po žingsnio išdėstyta šios sąrankos versija, įskaitant SSH ir tmux niuansus, yra puslapyje diktavimas balsu macOS terminale.

Sąžiningos ribos

Spausdinimo režimas ilgam tekstui lėtesnis nei įklijavimas — tai aritmetika, ne defektas. Gabalais siunčiami klavišų paspaudimai su dozavimo tarpais užtrunka ilgiau nei vienas įklijavimo įvykis, ir jei diktuoji kelias pastraipas į dokumentą, įklijavimo režimas atrodys žvitresnis. Būtent todėl įklijavimas lieka numatytasis, o spausdinimo režimą įsijungi nustatymuose pats; teisingas režimas priklauso nuo to, kur keliauja tavo tekstas.

Kai kurios programos riboja arba filtruoja sintetinę įvestį, dažniausiai dėl saugumo, ir jokia įterpimo strategija to visiškai neapeina — programa, atsisakanti sintetinių įvykių, jų atsisako iš kiekvieno diktavimo įrankio.

Ir aiškiai apie tai, ką šis straipsnis teigia ir ko ne: skundas „įklijavimas lūžta terminaluose“ yra visos diktavimo kategorijos šablonas, o ne kokio nors konkretaus konkurento defektas. Kiti įrankiai turi savus atsakymus ir savas stiprybes — sąžiningus palyginimus parašėme čia: Keebye vs Superwhisper ir Keebye vs Wispr Flow, įskaitant tai, kur kuris iš jų tau galėtų tikti geriau.

Įterpimas yra neišvaizdi diktavimo pusė

Kalbos atpažinimui atitenka visas dėmesys — modelių pavadinimai, tikslumo teiginiai, kalbų skaičiai. Bet diktavimo įrankis turi du darbus: teisingai tave išgirsti, o tada nunešti tekstą ten, kur yra tavo žymeklis, jo nepametant ir nesujaukiant. Antrasis darbas skamba menkai ir būtent jame kategorija tyliai nuvilia kūrėjus, nes antrasis darbas lengvas TextEdit programoje ir sunkus tmux lange nutolusioje mašinoje su Dvorak išdėstymu.

Jei tavo promptai nusileidžia terminaluose — o jei vairuoji kodavimo agentus, jie nusileidžia — įterpimas nėra išnaša. Tai skirtumas tarp įrankio, kurį demonstruoji, ir įrankio, kurį naudoji. Beje, giminingi gedimai turi tą patį skonį: pirmo diktavimo žodžio suvalgymas dėl šalto mikrofono paleidimo yra dar vienas visai kategorijai būdingas skundas su mechaniniu paaiškinimu, ir apie jį rašėme straipsnyje kodėl diktavimo programos suvalgo tavo pirmą žodį.

Keebye yra ankstyvojoje prieigoje macOS sistemai. Jei tavo diktavimas kada nors dingo kažkur tarp burnos ir terminalo, pradėk nemokamą bandomąjį laikotarpį žemiau, įjunk spausdinimo režimą ir pakartok tą patį promptą. Nusikopijuotas SHA lieka iškarpinėje, o žodžiai atkeliauja kaip suspausdintas Unicode.

Išbandyk sunkiausią savo terminalo kelią

Pradėk nemokamą bandomąjį laikotarpį, įjunk spausdinimo režimą ir išbandyk tą SSH ar tmux promptą, kuriame įklijavimas paprastai lūžta.

Start free trial

Early access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.

Skaityti toliau