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
This wraps by launching a shell
I followed the guide to install GCC pacman -S mingw-w64-ucrt-x86_64-gcc
I then ran pacman -Syu
. I had to run this twice and the first time the shell seemed to crash.
I can now install with pacman -S mingw-w64-ucrt-x86_64-zed
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>
“Sign In” prompts for a Github login
I’ll grant access
My Github avatar is a key that the sign-in worked
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
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
While there is an “Open new context” button after I save my API key, it doesn’t actually work
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
Compare that to the Invoke-RestMethod
Copilot (free) suggested
As well as a more succinct version from Gemini Code Assist
Let’s start by creating a new file in Zed
While I could not actually get the “Insert Selection” to work
I could just copy and paste it.
Try as I might, I could not get the vim key bindings to take effect
One of the more interesting features is the ability to keep splitting windows up and down
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
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.
Void
We can find Void on Github.
I fired off the devcontainer, but did get a warning
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
and Chocolatey
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
From there I can launch an app like Samsung Notes
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)
I can now pull up existing Notes
Or start a new one
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
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
Or via Google in Project IDX