2 poin oleh GN⁺ 2026-03-08 | 1 komentar | Bagikan ke WhatsApp
  • Editor struktural berbasis multi-kursor yang memungkinkan manipulasi langsung struktur kode, dengan beroperasi berpusat pada pohon sintaks (AST)
  • Mendukung interaksi pada tingkat node sintaks, sehingga mengurangi kesenjangan antara niat penulisan kode dan tindakan pengeditan yang sebenarnya
  • Dengan fitur multi-kursor, beberapa node sintaks dapat diubah atau direfaktor sekaligus untuk meningkatkan efisiensi pengeditan dalam skala besar
  • Mendefinisikan ulang metode pengeditan berbasis mode, sehingga perpindahan pada berbagai unit seperti kata, baris, dan node sintaks dapat dilakukan secara konsisten
  • Memperkuat akurasi dan konsistensi dalam pengeditan kode, serta menghadirkan paradigma pengeditan baru yang meningkatkan produktivitas pengembang

Gambaran Umum Ki Editor

  • Ki Editor adalah editor struktural multi-kursor (Multi-cursor structural editor) yang menyediakan lingkungan pengeditan untuk menangani struktur sintaks kode secara langsung
  • Berbeda dari pengeditan berbasis teks tradisional, editor ini memanipulasi elemen kode berdasarkan pohon sintaks (AST)
  • Memungkinkan pengeditan langsung pada tingkat node sintaks tanpa kombinasi mouse atau keyboard yang rumit

Interaksi Node Sintaks

  • Melalui fitur First-class syntax node interaction, struktur sintaks kode dapat ditangani secara langsung
    • Berfokus pada pengurangan kesenjangan antara niat penulisan kode dan tindakan pengeditan yang sebenarnya
    • Melakukan manipulasi pada unit sintaks tanpa perpindahan mouse atau input tombol yang rumit

Fitur Multi-kursor

  • Memanfaatkan Multiple cursors untuk mengedit beberapa node sintaks secara bersamaan
    • Manipulasi node sintaks secara paralel meningkatkan efisiensi pengeditan massal dan refaktorisasi
    • Memproses tugas modifikasi kode yang berulang dengan cepat

Pendefinisian Ulang Pengeditan Berbasis Mode

  • Fitur Redefine modal editing menstandarkan mode pemilihan
    • Mendukung perpindahan pada berbagai unit seperti kata, baris, dan node sintaks dengan cara yang konsisten
    • Meningkatkan fleksibilitas dan konsistensi dibanding pengeditan berbasis mode yang ada

Signifikansi

  • Ki Editor menghadirkan pengalaman pengeditan yang berpusat pada struktur sintaks, sehingga meningkatkan akurasi dalam penulisan dan modifikasi kode
  • Dengan menggabungkan multi-kursor dan manipulasi node sintaks, editor ini menawarkan pendekatan baru dalam pengeditan kode yang membantu meningkatkan produktivitas pengembang

1 komentar

 
GN⁺ 2026-03-08
Komentar Hacker News
  • Melihat fitur "First-class syntactic selection", saya langsung teringat shortcut Expand / Shrink Selection yang sering saya pakai di IDE JetBrains
    Dengan kombinasi Ctrl + W dan Ctrl + Shift + W, area seleksi bisa diperluas atau diperkecil berdasarkan unit sintaks
    Fitur ini benar-benar mengubah cara pandang saya terhadap interaksi dengan "teks" di dalam file
    VS Code dan Zed juga punya fitur serupa, tetapi terasa terlalu kasar saat memperluas/mengecilkan seleksi
    Tautan dokumentasi JetBrains

    • Shortcut JetBrains yang sering saya pakai antara lain:
      Dengan Cmd+Shift+V saya bisa membuka clipboard stack untuk mencari atau memilih riwayat salinan sebelumnya
      Cmd+Shift+E menampilkan daftar lokasi terakhir, dan Cmd+Shift+A membuka action palette untuk fuzzy search semua perintah
      Selain itu, fitur Local History memungkinkan pelacakan riwayat perubahan file jauh lebih rinci daripada Git
      Fitur-fitur seperti ini mengarah pada konsep bisa "langsung mengedit dari buffer hasil pencarian"
    • Di Neovim, fitur yang sama bisa dipakai lewat incremental selection berbasis tree-sitter
    • Mathematica sudah menyediakan fitur perluasan seleksi dengan Alt+. sejak awal 90-an
      Double-click memilih kata, triple-click memilih seluruh argumen fungsi, dan klik ke-4 memilih seluruh f(a,r,g,s), jadi unit sintaks membesar sesuai jumlah klik
      Memori otot itu masih tersisa sampai sekarang
    • Saya sedang meneliti version control berbasis AST
      Saya bereksperimen dengan ide agar commit, diff, dan cherry-pick juga bekerja pada unit sintaks seperti Ctrl+W
      Detail terkait dirangkum di proyek librdx
    • Saya juga sering memakai fitur ini di helix, tetapi implementasi vscode kurang bagus
      Editing yang sadar AST mengingatkan saya pada kenyamanan bahasa keluarga Lisp
      Di Lisp, hal-hal yang cukup dilakukan lewat manipulasi list sederhana di JS memerlukan LSP atau parser terpisah
      Setelah menghabiskan akhir pekan dengan Clojure lalu kembali ke TypeScript, perintah paredit benar-benar terasa dirindukan
  • Dulu saya pernah membuat sendiri editor berbasis pohon sintaks
    Karena yang dimanipulasi hanya pohon, bukan input teks, maka program yang salah secara sintaks tidak bisa ada
    Namun, tantangan besarnya adalah membuat metode input yang benar-benar layak dipakai
    Sekarang saya tidak bisa menjalankannya lagi karena perangkat display waktu itu sudah tidak ada, tetapi penjelasan proyeknya masih tersimpan

    • Masalahnya adalah adanya batasan bahwa "jalur dari program A ke B harus selalu melalui program yang valid"
      Akibatnya, kadang harus melewati jalur yang tidak intuitif, atau bahkan menulis ulang dari awal
      Bahkan bisa ada struktur yang valid tetapi tidak punya jalur pembentukan
    • Dulu saya pernah memakai bahasa dan editor eksperimental berbasis JetBrains MPS di kantor
      Secara teori menarik, tetapi rasanya seperti jalan buntu yang tidak praktis
      Sulit mengalahkan universalitas dan kesederhanaan antarmuka berbasis teks
      Batasan nyata seperti editor khusus, version control baru, dan ekosistem yang terputus terlalu besar
      Karena manusia tidak berpikir dalam unit pohon, menulis kode hanya dalam keadaan yang selalu valid secara sintaks terasa sangat menyesakkan
      Pada akhirnya, alat yang mengizinkan ketegasan yang fleksibel lah yang benar-benar bertahan (misalnya gradual typing di TypeScript)
    • Jika ingin mencoba kembali sistem lama seperti itu, lingkungan VT11 bisa dipulihkan dengan emulator simh dan mame
      Lihat simh, mame, kode VT11, dan dokumentasi
    • Proyek bernama Pantograph sedang mencoba kembali ide ini dengan pendekatan modern
      Ini belum menjadi editor umum, tetapi arah pengembangan pemilihan rentang pohon tampak menjanjikan
      Tautan Pantograph
    • Saat ini saya sedang mengembangkan proyek lanjutan bernama BABLR
      Dibangun di atas sistem parser yang menangani pohon yang belum lengkap tetapi tetap valid
      Melalui representasi gap seperti <//>, sintaks yang belum lengkap bisa ditangani dengan aman
      Contoh: 2 + · bisa di-parse menjadi pohon <BinaryExpression>
      Jika tertarik, diskusi berlangsung di komunitas Discord
  • Saya belum terbiasa dengan editing AST
    Saya hanya memakai text object untuk hal-hal seperti argumen fungsi atau arglist
    Fitur LSP yang saya gunakan pun sebatas go-to-definition dan rename
    Pada akhirnya saya jadi merasa perlu meningkatkan kemampuan editor saya

    • Dalam kasus seperti ini, alat seperti ast-grep sangat berguna
      Anda bisa menulis pola dengan sintaks yang hampir sama seperti kode, lalu melihat transformasinya langsung
      Misalnya, ast-grep -pattern '$A && $A.$B' --rewrite '$A?.$B' -lang ts memungkinkan transformasi optional chaining
      Metavariabel seperti $X, $A, dan lainnya memaksa pencocokan node yang sama
      Agen coding AI saat ini masih belum pandai menggunakan pola seperti ini, tetapi alatnya sendiri sangat solid
    • Sebenarnya tidak perlu memahami struktur AST secara mendalam
      Kebanyakan kasus cukup dengan memilih per node sintaks lalu hapus/salin/ganti
    • Kebutuhan akan editing AST juga berbeda tergantung pekerjaan masing-masing
      Saya sendiri jarang melakukan refactor skala besar, jadi tidak merasa perlu mempelajarinya
      Tetapi untuk pengembang layanan berskala besar, pendapatnya bisa sangat berbeda
    • Posisi saya juga mirip
      Saya mendapat banyak wawasan saat belajar menulis macro di Elixir, dan Lisp juga berada di jalur yang sama
      Pendekatannya berbeda di tiap bahasa, tetapi pada akhirnya menuju tujuan yang sama
  • Klasifikasi editor menurut saya seperti ini:

    1. Ortodoks (Orthodox) — berfokus pada UI dan integrasi
    2. Modal (peningkatan Vim) — mempertahankan keybinding lama
    3. Modal (pendekatan baru) — menafsirkan ulang filosofi Vim
      Ki termasuk kategori ketiga, dan saya terus mengamati proyek-proyek semacam ini
    • Ada kategori ke-4 juga — Emacs yang mencakup semuanya
    • Saya juga berpikir begitu. Banyak penantang bermunculan, tetapi rasanya juaranya tetap satu
    • Saya juga sedang mengembangkan editor kode modal berbasis AST
      Node UI terlihat seperti teks biasa, tetapi sebenarnya berupa struktur pohon
      Jika ingin memberi masukan awal, silakan hubungi lewat email di profil saya
    • Kalau bicara peningkatan Vim, akhirnya muncul juga candaan "Ed Visual Mode Improved Improved"
  • Kesulitan editing AST terletak pada discoverability
    Nodenya memang terlihat di layar, tetapi sering kali kita tidak tahu nama node tersebut
    Karena itu saya sedang memikirkan plugin yang membungkus area di sekitar kursor dengan warna untuk memvisualisasikan tiap scope
    Jadi alih-alih berpikir "pindah ke fungsi berikutnya", kita berpikir "pindah ke warna biru berikutnya"

    • Di Ki, meski tidak tahu nama node, cukup tekan d m untuk menampilkan label semua node sintaks yang sedang terlihat, lalu langsung melompat ke sana
    • Meski begitu, fungsi seleksi/perkecil di tingkat AST yang umum tetap bernilai tinggi
      Operasi seperti memilih bagian dalam atau luar dari node saat ini sangat berguna
  • Saya membuat integrasi Ki untuk VSCode
    Setelah itu saya tidak banyak sempat berkontribusi lagi, tetapi saya tetap menganggap inovasi pada alat dasar seperti ini sangat penting
    Tautan ekstensi Ki VSCode

    • Betul, itu memang ekstensi yang dimaksud
    • Mencoba editor baru itu terasa berat, jadi ekstensi VSCode ini menurunkan hambatan awal
  • Sebelum melihat contohnya saya belum terlalu paham,
    tetapi pada bagian "First-class syntactic modification" saya terpukau melihat koma bisa otomatis ditambah/hapus
    Logika implementasinya malah terasa cukup sederhana
    Sekarang saya jadi ingin mencoba integrasi Ki atau rewrite berbasis AST di Zed juga

    • Saya yang membuat ekstensi VSCode untuk Ki, dan karena strukturnya memakai komunikasi WebSocket, integrasi ke Zed juga seharusnya mudah
      Cukup lihat kode di repositori Ki
  • Saya berencana mencobanya sendiri sebentar lagi
    Saya suka bahwa editor ini independen dari layout keyboard
    Menarik juga bahwa ini terinspirasi dari filosofi Emacs tentang "semuanya adalah buffer yang bisa diedit"
    Tentu saja setiap editor punya trade-off besar, jadi sepertinya harus dicoba langsung baru terasa

    • Karena editor ini dirancang berpusat pada model editing, sayangnya semuanya harus dibangun ulang setiap kali
      Neovim memang hebat, tetapi model editing-nya punya batas
      Kalau strukturnya benar-benar bisa diganti total, mungkin Helix atau Ki tidak akan diperlukan
    • Tetapi independensi layout justru menjadi mimpi buruk bagi saya
      Saat dijalankan dengan keyboard Dvorak, pemetaannya jadi kacau total
      Ketika perangkat lunak merasa dirinya lebih pintar daripada pengguna, pengguna malah bisa merasa tidak berdaya
  • Tentu saja Emacs sudah punya ini
    Paket combobulate adalah contohnya

    • Dengan combobulate, navigasi AST yang natural seperti editing Lisp jadi memungkinkan
      Anda bisa menghapus node dengan M-k atau langsung mencari/mengedit lewat query tree-sitter
      Integrasinya sudah sangat bagus, tetapi editor khusus AST masih punya ruang untuk mendorong UX lebih jauh
  • Fitur ini sangat cocok dengan workflow Helix
    Rasanya seperti kepingan terakhir dalam pola move → action yang akhirnya pas