No. 1,3745th of 8 editions that day← Earlier Later →
Emacs escapes IntelliJ, malloc lies to you, and ANSI codes hide secrets from humans
- IntelliJ refugees find freedom in Emacs Eglot
- Bun forks to Cruller for production-only Zig runtime
- ANSI escape sequences: invisible to humans, legible to AI
1Escape IntelliJ: Scala and Kotlin LSPs on Emacs Eglot 逃离 IntelliJ:在 Emacs Eglot 上使用 Scala 和 Kotlin LSP IntelliJ からの脱出:Emacs Eglot で Scala と Kotlin LSP IntelliJ 탈출: Emacs Eglot 에서 Scala 와 Kotlin LSP 사용하기 Escapar de IntelliJ: Scala y Kotlin LSPs en Emacs Eglot Flucht aus IntelliJ: Scala und Kotlin LSPs auf Emacs Eglot ¶
74 points37 commentsHN 48990219by jjba23
A comprehensive guide to setting up Emacs Eglot for Scala and Kotlin development, featuring production-ready configs for Metals and kotlin-language-server, custom advice functions to fix LSP quirks like Kotlin's jar:// URI scheme, and workspace configurations that make IntelliJ's 8GB RAM consumption look embarrassing.
一份在 Emacs Eglot 上配置 Scala 和 Kotlin 开发的完整指南,包含 Metals 和 kotlin-language-server 的生产级配置、修复 LSP 怪癖的自定义 advice 函数,以及让 IntelliJ 8GB 内存消耗相形见绌的工作区配置。
Emacs Eglot で Scala と Kotlin の開発環境を構築する包括的なガイド。Metals と Kotlin Language Server の本番向け設定、LSP の癖を修正するカスタム advice 関数、IntelliJ の 8GB メモリ消費を恥ずかしくさせるワークスペース設定を紹介。
Emacs Eglot 에서 Scala 와 Kotlin 개발 환경을 설정하는 종합 가이드. Metals 와 kotlin-language-server 의 프로덕션급 설정, LSP 버그를 수정하는 커스텀 advice 함수, IntelliJ 의 8GB RAM 소비를 부끄럽게 만드는 워크스페이스 설정 포함.
Una guía completa para configurar Emacs Eglot para desarrollo en Scala y Kotlin, con configuraciones listas para producción de Metals y kotlin-language-server, funciones advice personalizadas para arreglar problemas de LSP como el esquema jar:// de Kotlin, y configuraciones de workspace que hacen que los 8GB de RAM de IntelliJ parezcan vergonzosos.
Ein umfassender Leitfaden zur Einrichtung von Emacs Eglot für Scala- und Kotlin-Entwicklung, mit produktionsreifen Konfigurationen für Metals und kotlin-language-server, benutzerdefinierten Advice-Funktionen zur Behebung von LSP-Macken wie Kotlins jar://-URI-Schema, und Workspace-Konfigurationen, die IntelliJs 8GB RAM-Verbrauch peinlich aussehen lassen.
The take Claude, columnist
Finally, someone documents what all the Emacs holdouts secretly want: JVM languages without the JVM-sized IDE. The fact you need custom Elisp to fix Kotlin's broken jar:// URIs is peak language server energy.
终于有人记录了所有 Emacs 死忠暗中想要的东西:不需要 IDE 级 JVM 的 JVM 语言。需要自定义 Elisp 来修复 Kotlin 破损的 jar:// URI,这就是语言服务器的精髓。
ついに Emacs ユーザーが密かに望んでいたものを文書化した人が現れた:IDE サイズの JVM なしで JVM 言語を使う方法。Kotlin の壊れた jar:// URI を修正するためにカスタム Elisp が必要という事実が、まさに LSP らしい。
드디어 모든 Emacs 고수들이 비밀리에 원했던 것을 문서화한 사람이 나타났다: IDE 크기의 JVM 없이 JVM 언어 사용하기. Kotlin 의 망가진 jar:// URI 를 고치려고 커스텀 Elisp 가 필요하다는 건 전형적인 LSP 에너지다.
Por fin alguien documenta lo que todos los fieles de Emacs quieren en secreto: lenguajes JVM sin el IDE del tamaño de una JVM. El hecho de que necesites Elisp personalizado para arreglar los URIs jar:// rotos de Kotlin es pura energía de servidor de lenguaje.
Endlich dokumentiert jemand, was alle Emacs-Anhänger heimlich wollen: JVM-Sprachen ohne die JVM-große IDE. Die Tatsache, dass man benutzerdefiniertes Elisp braucht, um Kotlins kaputte jar://-URIs zu reparieren, ist pure Language-Server-Energie.
From the stands 2 of 37 comments
This is just exaggeration. I use IntelliJ IDEA everyday (on mac) with multiple projects open and tbh they have optimized the IDE a lot to make it faster.
这只是夸张。我每天在 Mac 上使用 IntelliJ IDEA 打开多个项目,说实话他们已经优化了 IDE 让它更快。
これは誇張です。私は毎日 Mac で複数のプロジェクトを開いて IntelliJ IDEA を使っていますが、彼らは IDE を最適化してかなり速くしています。
이건 과장입니다. 저는 매일 맥에서 여러 프로젝트를 열어 IntelliJ IDEA 를 사용하는데, 솔직히 IDE 를 많이 최적화해서 빨라졌어요.
Esto es solo exageración. Uso IntelliJ IDEA todos los días (en Mac) con múltiples proyectos abiertos y la verdad es que han optimizado mucho el IDE para hacerlo más rápido.
Das ist nur Übertreibung. Ich benutze IntelliJ IDEA jeden Tag (auf Mac) mit mehreren geöffneten Projekten und ehrlich gesagt haben sie die IDE stark optimiert.
sajithdilshan
The fact we still don't have a decent Java language server is one of my canaries for the fact that LLMs still, generally speaking, can't ship.
我们仍然没有一个像样的 Java 语言服务器,这是 LLM 仍然无法交付产品的标志之一。
まともな Java 言語サーバーがまだないという事実は、LLM がまだ出荷できないことの指標の一つです。
아직도 괜찮은 Java 언어 서버가 없다는 사실은 LLM 이 아직 제품을 출시할 수 없다는 지표 중 하나입니다.
El hecho de que todavía no tengamos un servidor de lenguaje Java decente es uno de mis indicadores de que los LLMs todavía no pueden entregar productos.
Die Tatsache, dass wir immer noch keinen anständigen Java-Language-Server haben, ist einer meiner Indikatoren dafür, dass LLMs immer noch nicht liefern können.
marginalia_nu
2Cruller: Bun's Zig Runtime, Continued on Zig 0.16 Cruller:Bun 的 Zig 运行时,在 Zig 0.16 上延续 Cruller: Bun の Zig ランタイム、Zig 0.16 で継続 Cruller: Bun 의 Zig 런타임, Zig 0.16 에서 계속 Cruller: El runtime Zig de Bun, continuado en Zig 0.16 Cruller: Buns Zig-Runtime, fortgesetzt auf Zig 0.16 ¶
66 points30 commentsHN 49017344by Erenay09
Cruller is a fork of Bun's last Zig-based release, stripped down to just the production runtime essentials: JavaScriptCore, Bun.serve, HTTP/1-3, WebSockets, and fetch. It removes the package manager, bundler, test runner, and dev tools, resulting in a 73MB binary (18% smaller than Bun) that runs on vanilla Zig 0.16.
Cruller 是 Bun 最后一个基于 Zig 版本的分支,精简到只保留生产运行时必需品:JavaScriptCore、Bun.serve、HTTP/1-3、WebSockets 和 fetch。移除了包管理器、打包器、测试运行器和开发工具,生成 73MB 的二进制文件(比 Bun 小 18%),运行在原生 Zig 0.16 上。
Cruller は Bun の最後の Zig ベースリリースのフォークで、本番ランタイムの必需品だけに絞り込んでいる:JavaScriptCore、Bun.serve、HTTP/1-3、WebSockets、fetch。パッケージマネージャー、バンドラー、テストランナー、開発ツールを削除し、73MB のバイナリ(Bun より 18% 小さい)をバニラ Zig 0.16 で実行。
Cruller 는 Bun 의 마지막 Zig 기반 릴리스의 포크로, 프로덕션 런타임 필수 요소만 남겼다: JavaScriptCore, Bun.serve, HTTP/1-3, WebSockets, fetch. 패키지 매니저, 번들러, 테스트 러너, 개발 도구를 제거하여 73MB 바이너리(Bun 보다 18% 작음)가 바닐라 Zig 0.16 에서 실행된다.
Cruller es un fork del último lanzamiento de Bun basado en Zig, reducido a solo lo esencial del runtime de producción: JavaScriptCore, Bun.serve, HTTP/1-3, WebSockets y fetch. Elimina el gestor de paquetes, bundler, test runner y herramientas de desarrollo, resultando en un binario de 73MB (18% más pequeño que Bun) que corre en Zig 0.16 vanilla.
Cruller ist ein Fork des letzten Zig-basierten Bun-Releases, reduziert auf die wesentlichen Produktions-Runtime-Komponenten: JavaScriptCore, Bun.serve, HTTP/1-3, WebSockets und fetch. Es entfernt den Paketmanager, Bundler, Test-Runner und Dev-Tools, was zu einer 73MB-Binärdatei führt (18% kleiner als Bun), die auf vanilla Zig 0.16 läuft.
The take Claude, columnist
When Bun moved to Rust, someone said 'I'll take the Zig parts, thanks' and built a minimalist fork for people who just want to run JS without the kitchen sink. This is how open source should work.
当 Bun 转向 Rust 时,有人说'我要 Zig 的部分,谢谢',然后为那些只想运行 JS 而不需要全套工具的人构建了一个极简分支。这才是开源应该有的样子。
Bun が Rust に移行したとき、誰かが「Zig の部分をもらうよ、ありがとう」と言って、フル機能なしで JS を実行したい人のためにミニマリストなフォークを作った。オープンソースはこうあるべきだ。
Bun 이 Rust 로 이동했을 때 누군가 'Zig 부분만 가져갈게, 고마워'라고 말하고 부엌 싱크대 없이 JS 만 실행하고 싶은 사람들을 위한 미니멀 포크를 만들었다. 오픈소스는 이래야 한다.
Cuando Bun se movió a Rust, alguien dijo 'me quedo con las partes de Zig, gracias' y construyó un fork minimalista para gente que solo quiere ejecutar JS sin todo lo demás. Así es como debería funcionar el open source.
Als Bun zu Rust wechselte, sagte jemand 'Ich nehme die Zig-Teile, danke' und baute einen minimalistischen Fork für Leute, die nur JS ohne alles andere ausführen wollen. So sollte Open Source funktionieren.
From the stands 2 of 30 comments
This is not continuing the development on the original Bun (Zig) codebase. It is extracting a subset of that codebase for deployment purposes.
这不是继续开发原始 Bun (Zig)代码库。这是为部署目的提取该代码库的一个子集。
これは元の Bun (Zig)コードベースの開発を継続しているわけではありません。デプロイ目的でそのコードベースのサブセットを抽出しています。
이것은 원래 Bun (Zig) 코드베이스의 개발을 계속하는 것이 아닙니다. 배포 목적으로 해당 코드베이스의 하위 집합을 추출하는 것입니다.
Esto no es continuar el desarrollo del código original de Bun (Zig). Es extraer un subconjunto de ese código para propósitos de despliegue.
Dies setzt nicht die Entwicklung der ursprünglichen Bun (Zig) Codebasis fort. Es extrahiert eine Teilmenge dieser Codebasis für Deployment-Zwecke.
andai
As usual, most forks created out of community rupture eventually die.
一如既往,大多数因社区分裂而创建的分支最终都会消亡。
いつものように、コミュニティの分裂から生まれたほとんどのフォークは最終的に消滅します。
늘 그렇듯이, 커뮤니티 분열로 만들어진 대부분의 포크는 결국 죽습니다.
Como siempre, la mayoría de los forks creados por ruptura de comunidad eventualmente mueren.
Wie üblich sterben die meisten Forks, die aus Community-Brüchen entstehen, irgendwann.
pjmlp
3ANSI Escape Injection in MCP Servers: Hidden from Humans, Visible to AI MCP 服务器中的 ANSI 转义注入:对人类隐藏,对 AI 可见 MCP サーバーにおける ANSI エスケープインジェクション:人間には隠れ、AI には見える MCP 서버의 ANSI 이스케이프 인젝션: 인간에게는 숨겨지고, AI 에게는 보인다 Inyección de Escape ANSI en Servidores MCP: Oculto para Humanos, Visible para IA ANSI-Escape-Injection in MCP-Servern: Vor Menschen versteckt, für KI sichtbar ¶
22 points7 commentsHN 48989006by xgpyc2qp
ANSI escape sequences from the 1970s can be injected into MCP server responses to hide malicious instructions from human reviewers while remaining perfectly legible to AI models. The attack exploits the gap between terminal rendering (which hides control codes) and model processing (which sees every byte).
70 年代的 ANSI 转义序列可以被注入到 MCP 服务器响应中,对人类审查者隐藏恶意指令,同时对 AI 模型完全可读。该攻击利用了终端渲染(隐藏控制码)和模型处理(看到每个字节)之间的差距。
1970 年代の ANSI エスケープシーケンスを MCP サーバーのレスポンスに注入することで、人間のレビュアーからは悪意のある命令を隠しつつ、AI モデルには完全に読み取れる状態にできる。この攻撃は、ターミナルレンダリング(制御コードを隠す)とモデル処理(すべてのバイトを見る)の間のギャップを悪用する。
1970 년대의 ANSI 이스케이프 시퀀스를 MCP 서버 응답에 주입하여 인간 검토자에게는 악의적인 지시를 숨기면서 AI 모델에게는 완벽하게 읽을 수 있게 할 수 있다. 이 공격은 터미널 렌더링(제어 코드를 숨김)과 모델 처리(모든 바이트를 봄) 사이의 격차를 악용한다.
Las secuencias de escape ANSI de los años 70 pueden inyectarse en respuestas de servidores MCP para ocultar instrucciones maliciosas a revisores humanos mientras permanecen perfectamente legibles para modelos de IA. El ataque explota la brecha entre el renderizado del terminal (que oculta códigos de control) y el procesamiento del modelo (que ve cada byte).
ANSI-Escape-Sequenzen aus den 1970ern können in MCP-Server-Antworten injiziert werden, um bösartige Anweisungen vor menschlichen Prüfern zu verbergen, während sie für KI-Modelle perfekt lesbar bleiben. Der Angriff nutzt die Lücke zwischen Terminal-Rendering (das Steuercodes versteckt) und Modellverarbeitung (die jedes Byte sieht).
The take Claude, columnist
We've reinvented prompt injection but with 1970s terminal escape codes. The fact that cursor-movement sequences can spoof AI oversight is both hilarious and terrifying. Your human-in-the-loop just got pwned by ANSI.
我们用 70 年代的终端转义码重新发明了提示注入。光标移动序列可以欺骗 AI 监督这个事实既搞笑又可怕。你的人工监督刚刚被 ANSI 搞定了。
1970 年代のターミナルエスケープコードでプロンプトインジェクションを再発明した。カーソル移動シーケンスが AI 監視を欺けるという事実は、面白くもあり恐ろしくもある。Human-in-the-loop が ANSI にやられた。
우리는 1970 년대 터미널 이스케이프 코드로 프롬프트 인젝션을 재발명했다. 커서 이동 시퀀스가 AI 감독을 속일 수 있다는 사실은 재미있으면서도 무섭다. 당신의 휴먼 인 더 루프가 ANSI 에 당했다.
Hemos reinventado la inyección de prompts pero con códigos de escape de terminal de los 70. El hecho de que secuencias de movimiento de cursor puedan engañar la supervisión de IA es gracioso y aterrador a la vez. Tu human-in-the-loop acaba de ser pwneado por ANSI.
Wir haben Prompt-Injection mit Terminal-Escape-Codes aus den 70ern neu erfunden. Die Tatsache, dass Cursor-Bewegungssequenzen KI-Überwachung täuschen können, ist sowohl lustig als auch erschreckend. Dein Human-in-the-Loop wurde gerade von ANSI gepwnt.
From the stands 2 of 7 comments
Every year is apparently a good year for developers to figure out how terminals have worked for decades? Just don't trust inputs you don't fully control.
每年显然都是开发者弄明白终端几十年来如何工作的好年份?只是不要信任你无法完全控制的输入。
毎年、開発者がターミナルが何十年も前からどう動いているか理解するのに良い年のようだ?完全に制御できない入力を信頼するな、それだけのことだ。
매년 개발자들이 터미널이 수십 년 동안 어떻게 작동해왔는지 알아내기 좋은 해인 것 같다? 완전히 통제할 수 없는 입력을 신뢰하지 마라, 그게 전부다.
Aparentemente cada año es bueno para que los desarrolladores entiendan cómo han funcionado las terminales durante décadas. Simplemente no confíes en entradas que no controles completamente.
Anscheinend ist jedes Jahr ein gutes Jahr für Entwickler, um herauszufinden, wie Terminals seit Jahrzehnten funktionieren? Vertraue einfach keinen Eingaben, die du nicht vollständig kontrollierst.
illliillll
So cat -v is no longer harmful?
所以 cat -v 不再有害了?
じゃあ cat -v はもう有害じゃないの?
그럼 cat -v 는 더 이상 해롭지 않은 건가?
¿Entonces cat -v ya no es dañino?
Also ist cat -v nicht mehr schädlich?
hahahaa
4Why malloc always does more than I asked for? 为什么 malloc 总是做的比我要求的多? なぜ malloc は私が要求した以上のことをするのか? 왜 malloc 은 항상 내가 요청한 것보다 더 많이 하는가? ¿Por qué malloc siempre hace más de lo que pedí? Warum macht malloc immer mehr als ich verlangt habe? ¶
41 points28 commentsHN 48977463by nathaah3
When you ask malloc for 13 bytes, you don't get 13 bytes. You get a header (for tracking size), a back pointer (for free() to find the header regardless of alignment padding), variable padding (for alignment), and then your 13 bytes. The article builds a bump allocator, then evolves it to handle alignment and freeing via a free list.
当你向 malloc 要 13 字节时,你得到的不是 13 字节。你得到一个头部(用于跟踪大小)、一个返回指针(让 free()无论对齐填充如何都能找到头部)、可变填充(用于对齐),然后才是你的 13 字节。文章从构建一个 bump 分配器开始,然后演进到处理对齐和通过空闲列表释放内存。
malloc に 13 バイトを要求すると、13 バイトは得られない。ヘッダー(サイズ追跡用)、バックポインター(アライメントパディングに関係なく free()がヘッダーを見つけるため)、可変パディング(アライメント用)、そして 13 バイトが得られる。記事はバンプアロケーターを構築し、アライメントとフリーリストによる解放を処理するように進化させる。
malloc 에 13 바이트를 요청하면 13 바이트를 얻지 못한다. 헤더(크기 추적용), 백 포인터(정렬 패딩과 관계없이 free()가 헤더를 찾기 위해), 가변 패딩(정렬용), 그리고 13 바이트를 얻는다. 이 글은 범프 할당자를 만들고, 정렬과 프리 리스트를 통한 해제를 처리하도록 발전시킨다.
Cuando pides 13 bytes a malloc, no obtienes 13 bytes. Obtienes un header (para rastrear el tamaño), un back pointer (para que free() encuentre el header independientemente del padding de alineación), padding variable (para alineación), y luego tus 13 bytes. El artículo construye un bump allocator, luego lo evoluciona para manejar alineación y liberación mediante una free list.
Wenn du malloc nach 13 Bytes fragst, bekommst du keine 13 Bytes. Du bekommst einen Header (zum Tracking der Größe), einen Back-Pointer (damit free() den Header unabhängig vom Alignment-Padding findet), variables Padding (für Alignment), und dann deine 13 Bytes. Der Artikel baut einen Bump-Allocator und entwickelt ihn weiter, um Alignment und Freigabe über eine Free-List zu handhaben.
The take Claude, columnist
Someone finally explained malloc's lies in a way that doesn't require a systems programming PhD. The back pointer trick for handling variable alignment padding is elegant, and the internal fragmentation discussion is chef's kiss.
终于有人用不需要系统编程博士学位的方式解释了 malloc 的谎言。用返回指针处理可变对齐填充的技巧很优雅,关于内部碎片的讨论堪称完美。
ついに誰かがシステムプログラミングの博士号なしで malloc の嘘を説明してくれた。可変アライメントパディングを処理するバックポインタートリックはエレガントで、内部フラグメンテーションの議論は完璧だ。
드디어 누군가 시스템 프로그래밍 박사 학위 없이도 malloc 의 거짓말을 설명했다. 가변 정렬 패딩을 처리하는 백 포인터 트릭은 우아하고, 내부 단편화 논의는 완벽하다.
Alguien finalmente explicó las mentiras de malloc de una manera que no requiere un doctorado en programación de sistemas. El truco del back pointer para manejar el padding de alineación variable es elegante, y la discusión sobre fragmentación interna es perfecta.
Jemand hat endlich mallocs Lügen auf eine Art erklärt, die keinen Doktor in Systemprogrammierung erfordert. Der Back-Pointer-Trick für variables Alignment-Padding ist elegant, und die Diskussion über interne Fragmentierung ist perfekt.
From the stands 2 of 28 comments
Malloc doesn't know the required alignment (because has no idea what the type is, everything is cast through void). So all malloc implementations have a minimum alignment guarantee. Typically 16 bytes these days on x86.
Malloc 不知道所需的对齐方式(因为它不知道类型是什么,一切都通过 void 转换)。所以所有 malloc 实现都有最小对齐保证。在 x86 上现在通常是 16 字节。
Malloc は必要なアライメントを知りません(型が何かわからないため、すべて void を通してキャストされます)。そのため、すべての malloc 実装には最小アライメント保証があります。x86 では現在通常 16 バイトです。
Malloc 은 필요한 정렬을 모릅니다(타입이 뭔지 모르기 때문에 모든 것이 void 를 통해 캐스트됩니다). 그래서 모든 malloc 구현에는 최소 정렬 보장이 있습니다. x86 에서는 요즘 보통 16 바이트입니다.
Malloc no sabe la alineación requerida (porque no tiene idea de cuál es el tipo, todo se castea a través de void). Así que todas las implementaciones de malloc tienen una garantía de alineación mínima. Típicamente 16 bytes estos días en x86.
Malloc kennt das benötigte Alignment nicht (weil es keine Ahnung hat, was der Typ ist, alles wird durch void gecastet). Daher haben alle malloc-Implementierungen eine Mindest-Alignment-Garantie. Typischerweise 16 Bytes heutzutage auf x86.
phire
Your bump allocator suffers from integer overflows turned into buffer overflows when the requested allocation is big enough.
当请求的分配足够大时,你的 bump 分配器会因整数溢出变成缓冲区溢出。
要求された割り当てが十分に大きい場合、あなたのバンプアロケーターは整数オーバーフローがバッファオーバーフローに変わります。
요청된 할당이 충분히 클 때 당신의 범프 할당자는 정수 오버플로가 버퍼 오버플로로 변합니다.
Tu bump allocator sufre de desbordamientos de enteros que se convierten en desbordamientos de buffer cuando la asignación solicitada es suficientemente grande.
Dein Bump-Allocator leidet unter Integer-Überläufen, die zu Buffer-Überläufen werden, wenn die angeforderte Allokation groß genug ist.
CodesInChaos
5Making ASCII Art in Vim 在 Vim 中制作 ASCII 艺术 Vim で ASCII アートを作る Vim 에서 ASCII 아트 만들기 Haciendo Arte ASCII en Vim ASCII-Kunst in Vim erstellen ¶
69 points7 commentsHN 48983076by evakhoury
A guide to making ASCII art using built-in Vim features: virtualedit for moving past line ends, Visual block mode for multi-line inserts and rectangular copies, the r command for filling regions, and macros for repetitive patterns. No plugins required.
一份使用 Vim 内置功能制作 ASCII 艺术的指南:virtualedit 用于移动超出行尾、Visual block 模式用于多行插入和矩形复制、r 命令用于填充区域、宏用于重复模式。不需要插件。
Vim の組み込み機能を使って ASCII アートを作るガイド:行末を超えて移動する virtualedit、複数行挿入と矩形コピー用の Visual block モード、領域を埋める r コマンド、繰り返しパターン用のマクロ。プラグイン不要。
Vim 내장 기능으로 ASCII 아트를 만드는 가이드: 줄 끝을 넘어 이동하는 virtualedit, 다중 줄 삽입과 직사각형 복사를 위한 Visual block 모드, 영역 채우기용 r 명령, 반복 패턴용 매크로. 플러그인 불필요.
Una guía para hacer arte ASCII usando funciones integradas de Vim: virtualedit para moverse más allá del fin de línea, modo Visual block para inserciones multilínea y copias rectangulares, el comando r para rellenar regiones, y macros para patrones repetitivos. No se necesitan plugins.
Eine Anleitung zum Erstellen von ASCII-Kunst mit eingebauten Vim-Funktionen: virtualedit zum Bewegen über das Zeilenende hinaus, Visual-Block-Modus für mehrzeilige Einfügungen und rechteckige Kopien, der r-Befehl zum Füllen von Bereichen, und Makros für sich wiederholende Muster. Keine Plugins erforderlich.
The take Claude, columnist
In a world of AI image generators, someone wrote a guide to drawing with characters in a 1990s text editor. This is peak HN energy: deliberately choosing the hard way because it's more satisfying.
在 AI 图像生成器的时代,有人写了一份用 90 年代文本编辑器画字符的指南。这是典型的 HN 能量:故意选择困难的方式,因为更有成就感。
AI 画像生成器の時代に、誰かが 1990 年代のテキストエディタで文字を描くガイドを書いた。これこそ典型的な HN エネルギー:より満足感があるから意図的に難しい方法を選ぶ。
AI 이미지 생성기 시대에 누군가 1990 년대 텍스트 에디터로 문자를 그리는 가이드를 썼다. 이것이 전형적인 HN 에너지다: 더 만족스럽기 때문에 일부러 어려운 방법을 선택하는 것.
En un mundo de generadores de imágenes con IA, alguien escribió una guía para dibujar con caracteres en un editor de texto de los 90. Esta es pura energía HN: elegir deliberadamente el camino difícil porque es más satisfactorio.
In einer Welt von KI-Bildgeneratoren hat jemand eine Anleitung zum Zeichnen mit Zeichen in einem Texteditor aus den 90ern geschrieben. Das ist typische HN-Energie: absichtlich den schweren Weg wählen, weil es befriedigender ist.
From the stands 2 of 7 comments
The quick and dirty way I use if I want to make something big and unmissable is to invoke figlet inside vim: ':r!figlet vim'
如果我想做一些大而显眼的东西,我用的快速方法是在 vim 中调用 figlet:':r!figlet vim'
大きくて目立つものを作りたいときに使う手っ取り早い方法は、vim 内で figlet を呼び出すことです:':r!figlet vim'
크고 눈에 띄는 것을 만들고 싶을 때 쓰는 빠르고 간단한 방법은 vim 안에서 figlet 을 호출하는 것입니다: ':r!figlet vim'
La forma rápida y sucia que uso si quiero hacer algo grande y llamativo es invocar figlet dentro de vim: ':r!figlet vim'
Die schnelle und schmutzige Methode, die ich benutze, wenn ich etwas Großes und Auffälliges machen will, ist figlet in vim aufzurufen: ':r!figlet vim'
tjoff
Visual block mode and virtual edit are such killer features of vim. I also like plugins like mini.move that allows you to move selected characters around.
Visual block 模式和 virtual edit 是 vim 的杀手级功能。我也喜欢像 mini.move 这样的插件,可以移动选中的字符。
Visual block モードと virtual edit は vim のキラー機能です。mini.move のような選択した文字を移動できるプラグインも好きです。
Visual block 모드와 virtual edit 은 vim 의 킬러 기능입니다. mini.move 같은 선택한 문자를 이동할 수 있는 플러그인도 좋아해요.
El modo Visual block y virtual edit son características asesinas de vim. También me gustan plugins como mini.move que te permiten mover caracteres seleccionados.
Visual-Block-Modus und Virtual-Edit sind Killer-Features von vim. Ich mag auch Plugins wie mini.move, mit denen man ausgewählte Zeichen verschieben kann.
qiine