A short introduction to margo
Posted 2018/09/30 19:00
Given the present absence of proper documentation, this post aims to be a short, but hopefully adequate introduction to margo and its relation to GoSublime.
The gist of it is that GoSublime is moving towards being only a UI that talks to the
margo.sublime process — communicating all the editor actions like
show auto-completions, etc. and rendering the result in the editor.
To configure margo, you edit the package called
margo located at
If you press ctrl+.,ctrl+x or super+.,super+x on Mac, GoSublime will open it for you.
If the package doesn't exist, it will be created using the extension example as base.
If you read that file, you will see a call to
m.Use(...) with a list of objects. These objects are called reducers and they provide all the functionality available in GoSublime. e.g. code fmt'ting when you save a
.go file or press ctrl+.,ctrl+f.
For the most part this is also how you configure GoSublime now — just edit that file and save it. After you save a file in the
margo package (by default,
margo.go), margo will recompile itself and restart.
You can press ctrl+.,ctrl+x to open the
Most of the old settings in the GoSublime settings file are now ignored, and will be removed in the ftuure. If you read the extension example, the replacement reducers are marked with comments starting with
To get code fmt for
.go files, you need to use either the
golang.GoFmt reducer or the
golang.GoImports reducer. You can see them listed, but commented out here — you will need to un-comment one of them and save the file.
If you don't currently have GoSublime installed from the
development branch, see /b/migrate for instructions on how to install it. The current master branch is not supported.
Useful keybindingsreplace ctrl with super/cmd on Mac
- ctrl+.,ctrl+x — Open the
margopbackage. Save the file to have margo automatically re-compile and restart itself.
- ctrl+.,ctrl+e — Show a list of all known linter errors in the current file and all other views. A summary of them as well as the error for the current line is shown in the status bar.
- ctrl+9 — Access the
9ocommand prompt. It's not a terminal, but it can run and show the output of most commands. The
gocommand has support for linting.
- ctrl+.,ctrl+c — Access contextual user commands like
- ctrl+.,ctrl+t — Access test-specific user commands
- ctrl+.,ctrl+r — For command packages, run the command. For normal packages, run its tests. This key binding calls the
go.replaywhich automatically cancels any existing invocation of the command so it can be used for running and restarting servers, etc.
go.playis the same as
go.replayexcept it does not cancel the existing invocation. Arguments passed to these commands are passed directly to the command that is run.
- ctrl+.,ctrl+d — Show all top-level declarations in the current
+marks exported identifiers
-marks un-exported identifiers
~marks identifiers in
- ctrl+.,ctrl+l — Show all top-level declarations in the current Go package
- ctrl+.,ctrl+a — Show a list of all packages and allow browsing their top-level declarations
- ctrl+.,ctrl+o — Show a list of all packages and allow browsing their files
- ctrl+.,ctrl+m — Browse the files in the current directory and its sub-directories, recursively
- ctrl+.,ctrl+n — Create a new
.gofile and show some suggestions for initial content.
- ctrl+.,ctrl+g — Go to the definition of the identifier under the cursor. You can also hold ctrl+shift and left-click on an identifier.
- ctrl+.,ctrl+f — Format the current file without saving it.
- ctrl+.,ctrl+p — Add/remove packages in the current
- ctrl+.,ctrl+i — After adding a package, pressing this key binding will take you to the import that was added so you can rename it e.g. by naming it
_to import it for its side-effects.
- ctrl+.,ctrl+. — Open the command palette and show all