Editors: Zed, Void and More

Published: Oct 1, 2024 by Isaac Johnson

I keep hearing from some of the more senior staff at work about Zed. Clearly there are editors outside VSCode. I used to use TextEdit years ago and I know some very productive folks stil using Notepad++. I started my life using Vi and truth be told, I still use it daily (since I never could sort out the easy way in VSCode to comment and uncomment lines, but damn if I don’t have finger memory on VIM regexps.).

So, let’s talk about a few editors getting some play in the OS community - Zed, Void and I’m going to make a fun pitch for a very different way to edit at the end. Let’s get started.

And I might add I’m excluding myself from using Mac OS - i know Zed, for instance, is an easy install there - but I don’t have a Mac (with Mac OS anyhow) in my personal fleet so we’ll stick with Linux and Windows for our test base.

Zed

From the Zed Downloads page we see it’s out for Mac and Linux, but Windows is not yet available.

Let’s first try Linux in WSL

builder@DESKTOP-QADGF36:~$ curl -f https://zed.dev/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4327  100  4327    0     0  13072      0 --:--:-- --:--:-- --:--:-- 13072
Downloading Zed
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   520  100   520    0     0    362      0  0:00:01  0:00:01 --:--:--   362
100 60.5M  100 60.5M    0     0  20.2M      0  0:00:02  0:00:02 --:--:-- 43.2M
Zed has been installed. Run with 'zed'

At first I saw errors

builder@DESKTOP-QADGF36:~$ zed
zed: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by zed)
zed: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by zed)
zed: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by zed)

But here is another case of too old an Ubuntu

$ sudo apt install glibc-source libc6
Reading package lists... Done
Building dependency tree
Reading state information... Done
libc6 is already the newest version (2.31-0ubuntu9.16).
glibc-source is already the newest version (2.31-0ubuntu9.16).
The following packages were automatically installed and are no longer required:
  aspnetcore-runtime-3.1 aspnetcore-targeting-pack-3.1 aspnetcore-targeting-pack-6.0 dotnet-apphost-pack-3.1 dotnet-apphost-pack-6.0 dotnet-targeting-pack-3.1 dotnet-targeting-pack-6.0 fluent-bit
  libappstream-glib8 libdbus-glib-1-2 libfwupdplugin1 liblttng-ust-ctl4 liblttng-ust0 libxmlb1 mariadb-common python3-crcmod td-agent-bit
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 72 not upgraded.

The latest version for my ubuntu is 2.31

I tried the download as well

builder@DESKTOP-QADGF36:~/Workspaces$ wget https://github.com/zed-industries/zed/releases/download/v0.153.7/zed-remote-server-linux-x86_64.gz
--2024-09-25 06:46:06--  https://github.com/zed-industries/zed/releases/download/v0.153.7/zed-remote-server-linux-x86_64.gz
Resolving github.com (github.com)... 140.82.114.4
Connecting to github.com (github.com)|140.82.114.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/340547520/3b209ec8-4722-40a5-bf99-f6d69bd4c1c8?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240925%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240925T114627Z&X-Amz-Expires=300&X-Amz-Signature=b0b152984e6e2a4cb0cb160fb619061359004c17bd10e09dc6e153275a72fd71&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dzed-remote-server-linux-x86_64.gz&response-content-type=application%2Foctet-stream [following]
--2024-09-25 06:46:07--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/340547520/3b209ec8-4722-40a5-bf99-f6d69bd4c1c8?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240925%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240925T114627Z&X-Amz-Expires=300&X-Amz-Signature=b0b152984e6e2a4cb0cb160fb619061359004c17bd10e09dc6e153275a72fd71&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dzed-remote-server-linux-x86_64.gz&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.109.133, 185.199.108.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12162396 (12M) [application/octet-stream]
Saving to: ‘zed-remote-server-linux-x86_64.gz’

zed-remote-server-linux-x86_64.gz                   100%[================================================================================================================>]  11.60M  43.4MB/s    in 0.3s

2024-09-25 06:46:07 (43.4 MB/s) - ‘zed-remote-server-linux-x86_64.gz’ saved [12162396/12162396]

Then extract and run

builder@DESKTOP-QADGF36:~/Workspaces$ gzip -d zed-remote-server-linux-x86_64.gz

builder@DESKTOP-QADGF36:~/Workspaces$ chmod 755 zed-remote-server-linux-x86_64
builder@DESKTOP-QADGF36:~/Workspaces$ ./zed-remote-server-linux-x86_64
./zed-remote-server-linux-x86_64: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

Windows via Msys2

I saw we can add Zed via Mysys2

I haven’t used that before so I’ll need to download the installer and run

/content/images/2024/09/zed-02.png

/content/images/2024/09/zed-03.png

This wraps by launching a shell

/content/images/2024/09/zed-04.png

I followed the guide to install GCC pacman -S mingw-w64-ucrt-x86_64-gcc

/content/images/2024/09/zed-05.png

I then ran pacman -Syu. I had to run this twice and the first time the shell seemed to crash.

/content/images/2024/09/zed-06.png

I can now install with pacman -S mingw-w64-ucrt-x86_64-zed

/content/images/2024/09/zed-07.png

But this would not launch a window

isaac@DESKTOP-QADGF36 UCRT64 ~
$ zed
[2024-09-25T06:35:16-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:35:16-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:35:16-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:35:16-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:35:16-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:35:16-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
Zed failed to open a window: NoSupportedDeviceFound. See https://zed.dev/docs/linux for troubleshooting steps.

I saw others having this issue here

I tried forcing the driver (both Intel and NVidia)

isaac@DESKTOP-QADGF36 UCRT64 ~
$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json /ucrt64/bin/zed
[2024-09-25T06:38:22-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:22-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:22-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:22-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:22-05:00 ERROR blade_graphics::hal::init] Instance extension "VK_KHR_get_physical_device_properties2" is not supported
Zed failed to open a window: NoSupportedDeviceFound. See https://zed.dev/docs/linux for troubleshooting steps.

isaac@DESKTOP-QADGF36 UCRT64 ~
$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/10_nvidia.json /ucrt64/bin/zed
[2024-09-25T06:38:48-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:48-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:48-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:48-05:00 ERROR fs.rs] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
[2024-09-25T06:38:48-05:00 ERROR blade_graphics::hal::init] Instance extension "VK_KHR_get_physical_device_properties2" is not supported
Zed failed to open a window: NoSupportedDeviceFound. See https://zed.dev/docs/linux for troubleshooting steps.

isaac@DESKTOP-QADGF36 UCRT64 ~
$

Using Scoop

I saw notes we can install using Scoop on windows.

I needed Scoop first, so I installed with a regular (non-admin) Powershell prompt

PS C:\Users\isaac> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
PS C:\Users\isaac> Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Initializing...
Downloading...
Extracting...
Creating shim...
Adding ~\scoop\shims to your path.
Scoop was installed successfully!
Type 'scoop help' for instructions.
PS C:\Users\isaac>

I do so much in WSL, I didn’t have the basic dependencies like GIT, so I set that up with Scoop first

PS C:\Users\isaac> scoop install git
Installing '7zip' (24.08) [64bit] from 'main' bucket
7z2408-x64.msi (1.9 MB) [=====================================================================================] 100%
Checking hash of 7z2408-x64.msi ... ok.
Extracting 7z2408-x64.msi ... done.
Linking ~\scoop\apps\7zip\current => ~\scoop\apps\7zip\24.08
Creating shim for '7z'.
Creating shim for '7zFM'.
Making C:\Users\isaac\scoop\shims\7zfm.exe a GUI binary.
Creating shim for '7zG'.
Making C:\Users\isaac\scoop\shims\7zg.exe a GUI binary.
Creating shortcut for 7-Zip (7zFM.exe)
Persisting Codecs
Persisting Formats
Running post_install script...done.
'7zip' (24.08) was installed successfully!
Notes
-----
Add 7-Zip as a context menu option by running: "C:\Users\isaac\scoop\apps\7zip\current\install-context.reg"
Installing 'git' (2.46.2) [64bit] from 'main' bucket
PortableGit-2.46.2-64-bit.7z.exe (58.9 MB) [==================================================================] 100%
Checking hash of PortableGit-2.46.2-64-bit.7z.exe ... ok.
Extracting PortableGit-2.46.2-64-bit.7z.exe ... done.
Linking ~\scoop\apps\git\current => ~\scoop\apps\git\2.46.2
Creating shim for 'sh'.
Creating shim for 'bash'.
Creating shim for 'git'.
Creating shim for 'gitk'.
Making C:\Users\isaac\scoop\shims\gitk.exe a GUI binary.
Creating shim for 'git-gui'.
Making C:\Users\isaac\scoop\shims\git-gui.exe a GUI binary.
Creating shim for 'scalar'.
Creating shim for 'tig'.
Creating shim for 'git-bash'.
Making C:\Users\isaac\scoop\shims\git-bash.exe a GUI binary.
Creating shortcut for Git Bash (git-bash.exe)
Creating shortcut for Git GUI (git-gui.exe)
Running post_install script...done.
'git' (2.46.2) was installed successfully!
Notes
-----
Set Git Credential Manager Core by running: "git config --global credential.helper manager"

To add context menu entries, run 'C:\Users\isaac\scoop\apps\git\current\install-context.reg'

To create file-associations for .git* and .sh files, run
'C:\Users\isaac\scoop\apps\git\current\install-file-associations.reg'

I could then pull in the versions bucket

PS C:\Users\isaac> scoop bucket add versions
Checking repo... OK
The versions bucket was added successfully.

And install the nightly Zed build

PS C:\Users\isaac> scoop install versions/zed-nightly
Installing 'zed-nightly' (20240926) [64bit] from 'versions' bucket
zed-windows.zip (48.2 MB) [===================================================================================] 100%
Checking hash of zed-windows.zip ... ok.
Extracting zed-windows.zip ... done.
Linking ~\scoop\apps\zed-nightly\current => ~\scoop\apps\zed-nightly\20240926
Creating shim for 'zed'.
Making C:\Users\isaac\scoop\shims\zed.exe a GUI binary.
Creating shortcut for Zed (zed.exe)
'zed-nightly' (20240926) was installed successfully!

I then made a directory and launched Zed

PS C:\Users\isaac> mkdir Workspaces


    Directory: C:\Users\isaac


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         9/26/2024   5:06 PM                Workspaces


PS C:\Users\isaac> cd .\Workspaces\
PS C:\Users\isaac\Workspaces> zed .
PS C:\Users\isaac\Workspaces>

/content/images/2024/09/samsung-07.png

“Sign In” prompts for a Github login

/content/images/2024/09/zed-09.png

I’ll grant access

/content/images/2024/09/zed-10.png

My Github avatar is a key that the sign-in worked

/content/images/2024/09/zed-11.png

I’ll try setting this up with Google AI. I already use Gemini Code Assist with Visual Studio Code (and Copilot with Work). I’m curious how “Google AI Studio” compares

/content/images/2024/09/zed-12.png

Despite the neat look, I can tell it’s looking back at my GCP accounts as I needed to home a project to my API key

/content/images/2024/09/zed-13.png

While there is an “Open new context” button after I save my API key, it doesn’t actually work

/content/images/2024/09/zed-14.png

Update: What you need to do is close Zed, then reopen and the settings will have been made live.

For instance, I asked Gemini for what thought would return an Invoke Web-Request pattern but used a webClient instead

/content/images/2024/09/zed-15.png

Compare that to the Invoke-RestMethod Copilot (free) suggested

/content/images/2024/09/zed-16.png

As well as a more succinct version from Gemini Code Assist

/content/images/2024/09/zed-17.png

Let’s start by creating a new file in Zed

/content/images/2024/09/zed-18.png

While I could not actually get the “Insert Selection” to work

/content/images/2024/09/zed-19.png

I could just copy and paste it.

Try as I might, I could not get the vim key bindings to take effect

/content/images/2024/09/zed-20.png

One of the more interesting features is the ability to keep splitting windows up and down

/content/images/2024/09/zed-21.png

I can then do things like have a few different terminals, including using “Oneshot” to fire up MingGW Bash, WSL2 Bash (really in Linux) and Powershell

/content/images/2024/09/zed-22.png

As much as I like Zed, I’m not sure if it can overcome the killer feature of VSCode integrating between my WSL2 and Windows.

However, I can open WSL2 paths by the built-in Linux filesystem integration in Windows 11 so I do have a way to make it happen.

/content/images/2024/09/zed-23.png

Void

We can find Void on Github.

I fired off the devcontainer, but did get a warning

/content/images/2024/09/void-01.png

But it fell down on a /root mount. Beyond that, I looked into the devcontainer JSON and saw this launches a full VNC environment.

Instead, I’ll try a local build and run

builder@LuiGi:~/Workspaces/void$ npm install


... snip ...

[test/smoke] Installing dependencies...
[test/smoke] $ npm install

up to date, audited 97 packages in 425ms

19 packages are looking for funding
  run `npm fund` for details

3 high severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
[.vscode/extensions/vscode-selfhost-test-provider] Installing dependencies...
[.vscode/extensions/vscode-selfhost-test-provider] $ npm install

up to date, audited 11 packages in 424ms

1 package is looking for funding
  run `npm fund` for details

found 0 vulnerabilities

removed 1 package, and audited 1774 packages in 45s

207 packages are looking for funding
  run `npm fund` for details

20 vulnerabilities (11 moderate, 9 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

libkrb5-dev

I tried to launch in a shell

builder@LuiGi:~/Workspaces/void$ npm run watch

> code-oss-dev@1.94.0 watch
> npm-run-all -lp watch-client watch-extensions

[watch-extensions]
[watch-extensions] > code-oss-dev@1.94.0 watch-extensions
[watch-extensions] > node ./node_modules/gulp/bin/gulp.js watch-extensions watch-extension-media
[watch-extensions]
[watch-client    ]
[watch-client    ] > code-oss-dev@1.94.0 watch-client
[watch-client    ] > node ./node_modules/gulp/bin/gulp.js watch-client
[watch-client    ]
[watch-client    ] (node:22220) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
[watch-client    ] (Use `node --trace-deprecation ...` to show where the warning was created)
[watch-extensions] (node:22216) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
[watch-extensions] (Use `node --trace-deprecation ...` to show where the warning was created)
[watch-extensions] Error: Command failed: npm ls --all --omit=dev --parseable
[watch-extensions] npm ERR! code ELSPROBLEMS
[watch-extensions] npm ERR! invalid: @xterm/xterm@5.6.0-beta.52 /home/builder/Workspaces/void/node_modules/@xterm/xterm
[watch-extensions]
[watch-extensions] npm ERR! A complete log of this run can be found in: /home/builder/.npm/_logs/2024-09-24T11_05_05_225Z-debug-0.log
[watch-extensions]
... snip ...

and in vs code on multiple hosts.

I tried to pivot to yarn as the CONTRIBUTING.md suggests

builder@LuiGi:~/Workspaces/void$ yarn
yarn install v1.22.22
info No lockfile found.
$ node build/npm/preinstall.js
*** Seems like you are using `yarn` which is not supported in this repo any more, please use `npm i` instead. ***
/home/builder/Workspaces/void/build/npm/preinstall.js:20
        throw new Error();
        ^

Error
    at Object.<anonymous> (/home/builder/Workspaces/void/build/npm/preinstall.js:20:8)
    at Module._compile (node:internal/modules/cjs/loader:1368:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1426:10)
    at Module.load (node:internal/modules/cjs/loader:1205:32)
    at Module._load (node:internal/modules/cjs/loader:1021:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:142:12)
    at node:internal/main/run_main_module:28:49

Node.js v21.7.3
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

Nothing really worked. So we’ll put Void on the backburner

I even checked if it was in Scoop

/content/images/2024/09/void-02.png

and Chocolatey

/content/images/2024/09/void-03.png

Samsung Notes

Okay, this is a bit out there, but just for argument’s sake - say we do a lot of work while mobile. I use a decent size Samsung Galaxy today (and keep debating the fold). What if we want to edit using editors on our phone?

With Mobile Link, we can see and serve the apps on our phone into Windows 11 from the Phone Link app

/content/images/2024/09/samsung-01.png

From there I can launch an app like Samsung Notes

/content/images/2024/09/samsung-02.png

It’s not that Notes is a fantastic editor, but it is the app that is running when i pop out the integrated Pen on the phone and sketch drawings or diagrams while locked. So I do tend to keep a lot there.

Once unlocked I confirm yes i know about apps (i can say to stop bugging me about that)

/content/images/2024/09/samsung-03.png

I can now pull up existing Notes

/content/images/2024/09/samsung-04.png

Or start a new one

/content/images/2024/09/samsung-05.png

Here is me using Notes as well as Copilot via the Swift Keyboard (giving me access to GPT-4)

This means I could do things like Vim via Termux on the phone

/content/images/2024/09/samsung-06.png

Summary

We setup Zed on Windows (ultimately with Scoop) and tied it into GCP AI for Code assistance. We toured some of the features like multiple terminals and horizontal as well as vertical splits.

I actually took Zed to my work machine where I setup Google AI Studio on an authorized work project. This means Zed was really using a light version of Vertex AI as, according to this Medium writeup, AI Studio is like Vertex AI but doesn’t have Enterprise protections nor MLOps.

The issue I think I have the most is the lack of WSL integration. Even after a standard reboot I came back and Zed had disappeared and the latest Nightly build won’t launch. On the Mac it’s fine - so maybe it’s prudent to wait for a published standard build before going all in on Zed.

Void will be nice to try when the install works. I’ll only go so far to try and get an editor to work.

Lastly, I find the Samsung/Windows connectivity intriguing. I have (in my box of discarded tech) a Samsung Dex box with USB-A, HDMI and ethernet and in the mid-2010s I would use at work to snap my phone in and use a desktop computer. Dex is built-in now so you can just plug in a USB-C dongle and accomplish the same thing. However, Windows link means the phone stayed on the charger as my hotspot but I was accessing the apps. If the rotation to landscape could be enabled, I might go all in on this.

However, with all these editors, the truth is I’ll still use VSCode. I think it’s the fastest and behaves the same way across my myriad of devices. I also like using hosted Code whether that is my own self-hosted instance

/content/images/2024/09/code-01.png

Or via Google in Project IDX

/content/images/2024/09/code-02.png

Zed Void VSCode Samsung Code Editors

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes