Editor setup
Editor setup
The editor is where most of the typing and reading actually happens. This article covers the leading editors, the standard protocols (LSP, DAP), and EditorConfig.
1. Visual Studio Code
Microsoft unveiled it at the Build conference in April 2015 and open-sourced it under MIT later that November (the microsoft/vscode repo). Built on Electron (Chromium + Node.js) in TypeScript. The mostly free marketplace and the LSP / DAP standards Microsoft codified around the same time combined to make it the default starter editor for many.
VS Code comes in two streams — Microsoft's official build (with telemetry and some proprietary extensions) and VSCodium, a community build of the same source with telemetry stripped.
2. LSP — Language Server Protocol
Microsoft first published it in 2016. A JSON-RPC protocol between editors and language tools (autocomplete, navigation, diagnostics). Build a server once, and every LSP-compliant editor can use it. As a result, Neovim, Helix, Zed, Emacs, VS Code, and JetBrains can share the same language servers.
3. DAP — Debug Adapter Protocol
Published by Microsoft in 2018. The same idea as LSP, applied to debuggers and editors.
4. The JetBrains family
IntelliJ IDEA (2001), PyCharm (2010), WebStorm (2010), GoLand (2017), and others. Deeply integrated per-language static analysis, refactoring, and debugger. Paid licensing (some free for personal use). Android Studio is built on the IntelliJ Platform.
5. Cursor · Zed · Neovim
- Cursor (2023, Anysphere) — A VS Code fork with built-in AI assistance.
- Zed (2024, Zed Industries) — Rust. A GPU-accelerated editor by core Atom alumni. macOS-first, with Linux and Windows support landing.
- Neovim (2014) — A Vim fork. Lua config and a built-in LSP client.
6. EditorConfig
The standard at editorconfig.org. Write basic conventions like indentation, line endings, and encoding into a .editorconfig file, and many editors follow them automatically. VS Code uses an extension (EditorConfig.EditorConfig); JetBrains has it built in.
7. Core VS Code extensions
| Area | Extension |
|---|---|
| Format | Prettier · Biome |
| Lint | ESLint · Ruff · Java by Red Hat |
| Language | Python (ms-python) · Pylance · Rust Analyzer · Go · Java Extension Pack |
| Git | GitLens |
| Environment | EditorConfig · Remote SSH · WSL · Dev Containers |
| Debug | DAP-based debuggers per language |
Many extensions auto-install and manage their LSP servers. Installing Pylance brings in Microsoft's Python language server alongside.
8. Workspace settings
Putting settings in .vscode/settings.json separates them from the user's globals. Workspace settings fit team-shared conventions:
// .vscode/settings.json
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" },
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
},
"files.eol": "\n",
"files.insertFinalNewline": true
}
Listing recommended extensions in .vscode/extensions.json automatically guides new collaborators.
.editorconfig example:
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
[*.{md,markdown}]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
9. Other paths
The right pick depends on context.
- For large Java / Kotlin projects or frequent deep refactoring, JetBrains' static analysis pays off.
- For lightweight multi-language work, rich extensions, and remote / container development (Remote SSH, Dev Containers), VS Code fits.
- For keyboard-centric workflows, terminal-bound work, and SSH server environments, Neovim is fast.
- For prioritizing AI assistance, VS Code forks like Cursor or Windsurf, or VS Code + Copilot, fit.
10. Install examples
# Windows: winget
winget install -e --id Microsoft.VisualStudioCode
winget install -e --id JetBrains.IntelliJIDEA.Community
# macOS: Homebrew
brew install --cask visual-studio-code
brew install --cask intellij-idea-ce
brew install neovim
Extension installs (VS Code CLI):
code --install-extension EditorConfig.EditorConfig
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension charliermarsh.ruff
11. Common pitfalls
User globals vs workspace clashes — two formatters running at once. Set editor.defaultFormatter per language explicitly.
ESLint + Prettier rule conflicts — eslint-config-prettier is the standard remedy that turns conflicting rules off, or pick a single tool like Biome.
Extensions in WSL or Remote SSH — missing the "install on remote" step leaves autocomplete silently broken.
Mixed \r\n and \n — pair .editorconfig's end_of_line = lf with .gitattributes' * text=auto eol=lf to keep things consistent.
JetBrains IDE indexing — searches return empty before indexing finishes. Watch the indexing progress bar.
Closing thoughts
LSP and DAP standardization let editors share language servers. Tool choice is preference, but EditorConfig and .gitattributes consistency is a team asset. With AI assistance (Cursor, Copilot, Claude Code) reshaping in-editor workflows, the editor itself stays safer when it remains simple.
Next
- linting-formatting
- python-venv-poetry-history
References include VS Code docs, Language Server Protocol, Debug Adapter Protocol, editorconfig.org, JetBrains, Neovim, Zed, VSCodium, and Awesome LSP Servers.