Trying to read tiny text Out and about, when I had short hair One of the few long-haired photos I've got laying around

Hi, my name’s Andrew and I’m a programmer. You can find me as “AndrewRadev” on github and on twitter.

Professionally, I code mostly in Ruby on Rails, and these days, in React. In my spare time (and very non-professionally), I try to play around with all sorts of other stuff: Image processing, gamedev with Unity, opengl and webgl, Android, electronics, and any fun programming-related thing that crosses my path.

I teach “Programming with Rust” at Sofia University, an elective course that takes place during the winter semesters. I also have a Vim course in the works, but we’ll see how that works out.


I’m a huge fan of Rust for certain categories of side-projects and, apart from example code for my university course, I’ve built a few things for myself:

  • quickmd is a fast, self-contained markdown previewer.
  • id3-image allows easy manipulation of images embedded in mp3s. Think cover art and thumbnails.
  • cargo-local lets you find the local source code of packages, useful for exploring them with an editor or generating tags.


I don’t have that many published Ruby gems, compared to how long I’ve been working on the language. I guess working professionally in it means I tend to focus my spare time on other things, for the sake of variety. Here’s a few of my projects, though:

  • vimrunner is a ruby library that lets you spawn a Vim instance and control it. This could be useful for integration tests for Vim plugins and it’s actually being used for CI in some of my own plugins and a few others (like runspec.vim, vim-elixir, vim-ruby).
  • progressor is a ruby gem that lets you measure loops of a long-running task and show some estimation of the remaining time. Useful for long data migrations, for instance.
  • ctags_reader is a little library to read ctags “tags” files and give you an interface to query them in a similar way that a text editor would. It’s useful for some super-simple static analysis of code. I’ve used it to generate documentation links in non-API docs.
  • waiting-on-rails runs the rails command, while also playing some relaxing elevator music until the server boots. Convenient for that legacy monolith you need to start up every morning.
  • image-processing is an implementation of a bunch of simple image processing algorithms in ruby, using the chunky_png library. It’s mostly an exercise, though I’d love to improve them and actually figure out a good use for them. And possibly rewrite them in, say, Rust.
  • daily_sites is a small website I use to manage my everyday reading list.


I’m a dedicated Vim user and I’ve created quite a few Vim plugins. I maintain the VimLinks twitter account, I’m one of the maintainers of the official ruby bindings for Vim (but I’m pretty bad at keeping up with the work there), and I own the runtime files for Vim’s eco support (though they haven’t needed refreshing in a long, long while).

A few of the more interesting ones:

  • splitjoin lets you switch between multiline and single-line versions of the same code.
  • linediff lets you diff blocks of code instead of files.
  • tagalong automatically changes a closing HTML tags when you edit the opening one.
  • inline_edit makes it easier to edit code that’s embedded in other code, like script tags within HTML.
  • switch changes code in predetermined ways depending on what is currently under the cursor.
  • sideways moves items in lists (argument lists, arrays) to the left and to the right. It also provides a text object for “item in argument list”, which is arguably the more useful part of the plugin.
  • whitespaste attempts to adjust blank lines automatically when pasting.
  • multichange provides an easy way to replace words in a buffer or a particular area. Think variable renaming.
  • writable_search lets you grep for something, edit the results directly and have the changes update the original buffers.
  • undoquit is like a “Restore Tab” button for Vim, except it also works for splits. A window that was closed with :quit can be reopened with a keymap.
  • ember_tools provides some useful tools to work with an ember.js project.
  • gnugo is a UI around a GnuGo process – it lets you play Go right in your Vim.
  • id3 lets you “edit” mp3 files by editing their ID3 tags. It also handles flac files, so I might just rename it to something more appropriate one of these days.
  • discotheque is a bit of a joke, but it can be a fun party trick.

If you’re a Vim user, you might also like to look around my Vimfiles. The README might point you in the right directions to explore.


I’ve got a playlist of Vim-related screencasts, mostly of my own plugins or setup:

Occasionally, I speak at conferences, and I’ve put most of the videos in one youtube playlist. Most of them happen to be in Bulgarian, but if it has an English title, it should be in English: