Vico home blog download feedback lists help api

Vico is dead. Long live Vico.

During the last months, development on Vico has mostly stalled. This is frustrating for many users, and for me, as I no longer can spend as much time on Vico as I'd like. My plans for Vico is grander than that.

Therefore I'm releasing the source code on github and encourage the community to contribute and help build a truly kick-ass editor.

Vico will be removed from the App Store. Being there in the first place has been problematic, and the sandboxing requirement makes it finally incompatible. A new build is available on the download page without any trial restrictions.

If you want to get involved with Vico, drop a note on the mailing list.


Vico 1.3.2

Unfortunately, Vico 1.3.1 has several stability issues. An update has been pushed to App Store and should be available soon (when approved).

The trial version is already available and ready for download.

I'm sorry for any inconvenience this has caused.

The changes in version 1.3.2 are:

  • Fixed a crash when closing document windows in certain cases
  • Fixed a crash when pasting text in visual mode
  • Fixed a crash when saving fails due to permission denied
  • Fixed a crash when closing another tab by clicking the X icon
  • Fixed a crash when searching files
  • Prevent symlink loops in file explorer

The trial version also has support for easy submission of crash reports.

edit: Vico 1.3.2 is now approved and available on the App Store


Vico 1.3.1 submitted

Vico 1.3.1 has been submitted to the App Store and is waiting for review. This is a bug fix release, mainly focusing on memory usage. Vico no longer uses garbage collection to manage memory.

The changes are:

  • Many memory leaks have been fixed.
  • Garbage collection is no longer used.
  • Externally modified documents that aren't edited in Vico are now automatically reverted. To go back to the old behaviour of always asking if Vico should revert a document:

    $ defaults write se.bzero.vico alwaysAskModifiedDocument -bool true
  • Allow scrolling beyond last screenful with <ctrl-e>.

  • Implement the ' and ` marks. Use `` to jump back to the last jump.
  • Unbreak :quit behaviour.
  • Caret screen update artifacts fixed.
  • Implement detaching of split views to new windows (bound to <ctrl-w>D)
  • <command-n> now opens a new window (<command-shift-N> opens a new untitled document)
  • Fixed a crash in the file explorer when filtering symlinked directories.


1.3.x bug fix release

I'm working on a bug fix release for 1.3. It should fix the memory issues, where Vico over time uses way too much memory.

The next feature release (1.4) is still a month away. One of the new things is SCM status icons in the file explorer.


Vico 1.3 released

Vico 1.3 was finally approved in the App Store.

The changes in this release are:

  • Project search using Ack
  • Highlighting of matching smart pairs
  • Added zt, zb and zz commands; scrolls the screen relative the caret position
  • Block text objects added: i[, ib, iB and i<, as well as the 'a' counterparts
  • "Breadcrumbs" folder navigation in file explorer
  • Support for Finder aliases in the file explorer
  • Added setting for blinking caret
  • Added boolean 'clipboard' setting; when enabled (default off), yanks by default into '+' register (the clipboard)
  • Ctrl-u and ctrl-w recognized in insert mode
  • Standard Cocoa alt-backspace / alt-delete keys recognized in insert mode
  • Command line helper can now open files in new windows with -n option
  • Themes with dark backgrounds now use a white I-beam mouse cursor
  • Added the gv command (re-select last selection)
  • Global (uppercase) marks jump between files
  • Mark locations are adjusted for inserted/deleted text
  • All open documents can now be reverted at once when externally modified
  • Added + and - commands
  • Word completion now honors the ignorecase and smartcase settings


  • Fixed delete problem with non-western input methods
  • Fixed weird caret size and position with RTL unicode characters
  • Copied bundles no longer results in duplicate bundle commands
  • Fixed enabling of certain menu items, and make vi menu items respond to key events
  • Tags files with absolute paths are now recognized
  • Fixed cases where filesystem changes wasn't noticed by the file explorer
  • Better handling of symlinked folders in the file explorer
  • Make line number font size follow editor font size
  • The '=' command now indents properly over multiple lines
  • Tweaks for better TextMate bundle compatibility
  • :edit! now reverts the open document
  • Preserve POSIX permissions and uid/gid when saving over SFTP
  • Command-clicking in explorer now selects the file


Vico 1.3 almost ready

Vico 1.3 will include an ack-based find in project, highlighting of matching pairs, more block text objects and many fixes.

Vico 1.3 was submitted to the Mac App Store a week ago, rejected, and now submitted again. This delay is quite frustrating, but is part of the process if Vico should remain on the App Store.

edit: vico 1.3 is now released


Vico 1.2 available

Vico 1.2 just got approved by Apple. It took a bit longer this time, I'm sorry for any inconvenience.

Changes in this release are:

  • Lion compatibility bugs fixed
  • Lion fullscreen support
  • Fuzzy find no longer requires the toolbar to be visible
  • Improved indentation behaviour (should match TextMate behaviour more closely)
  • Shift operators (< and >) now honors a count in visual mode
  • Added gdefault setting (use :set gdefault) -- makes :s always use g option (globally replace all occurrences on a line)
  • Support transparent backgrounds in themes
  • Reworked ex command parsing; allow for customizing and adding of new user-defined ex commands
  • Added gi vi command; enter insert mode where insert mode was last exited)
  • Fix creating new folders for SFTP
  • Shows .htaccess and version control .ignore files in explorer by default
  • Added wrapscan setting (enabled by default, use :set nowrapscan to turn it off) -- makes searches wrap around to beginning of document
  • Added @ vi command; execute content of a register as a normal mode command -- q is still missing, but you can yank into a register
  • Expand % and # characters in ex edit commands
  • :set can now toggle boolean variables with :set var! or :set invvar


Automatically hard-wrap text

There's a question if Vico can automatically hard-wrap text at a certain column. Vim can do this when the textwidth setting is non-zero.

This setting is not natively supported by Vico, so the natural follow up question was: "But can I script it?".

Read more…


Vico 1.2 waiting for review

This is just a short note that Vico 1.2 was submitted to the App Store two days ago and is now waiting for review. This release fixes the Lion issues in 1.1. More details about 1.2 is coming once it is approved.


Scripting Vico

Vico is scriptable in the Nu language. The Nu webpage describes it as:

Nu is an interpreted object-oriented language. Its syntax comes from Lisp, but Nu is semantically closer to Ruby than Lisp. Nu is implemented in Objective-C and is designed to take full advantange of the Objective-C runtime and the many mature class libraries written in Objective-C. Nu code can fully interoperate with code written in Objective-C; messages can be sent to and from objects with no concern for whether those messages are implemented in Objective-C or Nu.

Since Vico is written almost exclusively in Objective-C, Nu can take advantage of the native classes that make up Vico. The available classes and methods you can call are being documented here. This allows creating rich plugins that integrate seamlessly with Vico and the rest of Mac OS X.

As an example, here's a "Hello World" example using Cocoa:

(let (alert (NSAlert new))
  (alert setMessageText:"Hello, World!")
  (alert beginSheetModalForWindow:((current-window) window)

Paste this into Vico, select it, and issue the :eval command, and you'll get the familiar greeting as a nice Cocoa sheet. If you want to play with this example, check out Apples documentation for NSAlert.

Read more…


Vico 1.1 in review

Vico 1.1 is in review on the App Store. It should hopefully be available in a couple of days.

Changes in this version are:

  • Improved memory usage
  • Quickly repeating bundle commands now works correctly
  • Fixes a crash when ssh was terminated
  • Add ~ and g~ commands (toggle case)
  • Follow Finder conventions in file explorer (<cmd-up> goes to parent directory, <alt-up> now moves to top)
  • :quit behaves more like Vim
  • :edit now always open documents in the current split
  • :yank, :copy, :move and :delete ex commands are added
  • The toolbar is automatically hidden if it was hidden before <cmd-t> searching

In other news, I will be trekking for a week in the northern of Sweden, so I won't be able to answer emails or maintain the blog during that time.


Development release r2207

Development release r2207 is available.

Changes in this release are:

  • Support for non-western languages and input methods (switches to ASCII-capable input method in normal mode)
  • Sidebar search fields moved to the toolbar
  • Explorer automatically tracks changes in file system
  • Explorer visually marks modified documents
  • Vicotool can now be used for commit messages (with the -w option)
  • <ctrl-w>w implemented (cycle split views)
  • <ctrl-w>p implemented (focus previous split view)
  • <ctrl-cmd-r> reveals the current document in the sidebar
  • Replaced Nu console with :eval ex command
  • Fuzzy file search (<cmd-t>) should be faster
  • Shift-arrows now enter visual mode
  • Tabsize and line wrap settings now honor scopes
  • Parsing symbols should be faster
  • Current screen line can now be highlighted
  • gq command implemented, uses embedded par program
  • Tab key in ex command now does context-sensitive completion
  • And many bugs fixed...

Since the search input fields have been moved to the toolbar, you might need to reset the default set of toolbar icons for <cmd-t> and <cmd-shift-t> to work.


Development release r1944

Development release r1944 is now available.

There are not many visible changes in this release, mostly bug fixes.

There are two new experimental settings: hidetab and prefertabs. The former hides the tab bar if only one tab is visible. The latter controls whether documents by default are opened in a new tab or in the same view. To open documents in the same view by default, use :set noprefertabs.

Update: r1942 was replaced with r1944.


Development release r1921

Development release r1921 is now available.

Changes in this release are:

  • Tab key now honors the expandtab setting (spaces inserted instead of a tab, use ctrl-v tab to insert a hard tab)
  • New smarttab setting: tab/backspace changes indentation in leading whitespace
  • The vico shelltool now handles paths with spaces
  • Fuzzy search in explorer (cmd-t) now handles paths better
  • Snippets honor the expandtab setting
  • Advanced preference pane for editing global environment variables
  • Ex command :s (substitute) implemented
  • Automatically de-indents lines matching decreaseIndentPattern from the syntax definition
  • Adds word, string and paragraph text objects (diw, yap, ci" etc)
  • Supports alternative keys for switching document tabs (cmd-{/}, alt-cmd-left/right as well as (shift-)ctrl-tab)
  • Vi commands gk and gj added (move up/down screen lines)


Macros and key bindings

Vicos key bindings are flexible and can be changed with a little bit of Nu script. In fact, all key bindings are configured in the file in the Resources folder inside the application bundle.

There are 7 built-in maps: the normal, insert and visual maps, the operator map for commands that require a motion such as d and c, maps for the explorer and symbol sidebars and the completion map for the completion window.

You can also create named maps that can be included in other maps if they share the same keys. Vico uses this to bind the arrow keys both in normal, visual and insert mode.

To change a key binding, it's easiest to create a macro. A macro is expressed as a string of one or more vi commands. Modifier keys are written inside angle brackets, for example <ctrl-d>, <alt-shift-down> or <cmd-pageup>. Only use the shift modifier for "command" keys, such as <shift-cr>. For regular characters, use the shifted representation, for example <ctrl-D>.

Here are a couple of examples:

Read more…


Development release r1846

Development release r1846 is now available.

Changes in this release are:

  • Fully asynchronous remote file operations. Vico should never block on SFTP requests on a slow or disconnected network.
  • Automatic software updates
  • The ctrl-d and ctrl-u scrolling commands are implemented
  • Ctags now also work over SFTP
  • Read-only support for http:// and ftp:// urls


Future plans

Firstly, thank you all for the wonderful feedback. I'm really glad you like it as much as I enjoy writing it.

I've been working full time on Vico a couple of months now, and things progress quite fast. I'm now mostly focusing on improving stability and missing basic features, like search and replace.

I intend to build a business selling Vico as shareware. The exact price is not yet decided, but expect it to be around US$50.

Regarding the two week validity period of the development releases; it means I must have a stable enough code base to be able to build a new version before that time period ends, and I'd like to avoid maintaining branches. I believe small evolutionary changes are superior to revolutionary rewrite-from-scratch projects.

The next release includes fully asynchronous document loading and file management, sparkle updates and a bunch of bug fixes.

I need to get back to hacking now, but I'll setup a mailing list for discussions tonight.


Introducing Vico

Hi, and welcome to Vico.

Vico is the result of a personal itch. My eyes want a beautiful looking, modern Mac text editor. But my fingers just want vi.

Vico is inspired by some great software out there. The vi/vim command set beats anything in terms of efficiency and speed. TextMate has set a new standard in many ways, and the bundle community is still thriving.

There are still key features missing in Vico, but I think it's already very useful. Try out the latest development release and tell me what you think in the comments.

I hope you'll like Vico.