Article Image
Article Image
read

I’ve got a little keybinding in my .vimrc file which inserts a debug statement into a file, and then saves it;

map <Leader>db Odebugger; 1<CR><ESC>:w<CR>

So, if I’m editing foo.rb with my cursor on line 2;

1 def hello
2   puts "Hello, world!"
3 end

Then if I hit ,db the file will look like this;

1 def hello
2   debugger; 1
3   puts "Hello, world!"
4 end

Saving the file triggers any test runner process that might be watching the file for changes.

FYI the ; 1 is there in case I want to insert a debug statement at the end of a block - in that case, it gives the debugger something to stop on.

This is great for ruby and javascript, but for other languages like elixir, I need to insert a different statement.

In the past, I’ve done this by creating a custom .vimrc file for each project, in which I remap that key combination to whatever is appropriate. But, that gets pretty tedious when you have a lot of projects.

I want to define my editor config once, but have it insert whatever statement is appropriate, according to the language of the file I’m editing.

Here’s how I’ve done it.

Create a file ~/.vim/scripts/debug.vim

function InsertDebugStatement()
  let debug = "debugger; 1"  | " default because it works for ruby & javascript

  if (&filetype == "elixir")
    let debug = "TestHelper.enable_debug_logging"
  endif

  exec ":normal O" . debug
  exec ":write"

endfunction

map <Leader>db :call InsertDebugStatement()<CR>

Then, in my .vimrc;

source ~/.vim/scripts/debug.vim

That’s it. The key sequence calls the InsertDebugStatement function, which uses the current value of filetype to insert whatever debug statement is required, and then save the file.

Blog Logo

David Salgado


Published

Image

Ronin on Rails

Give a man a fish and he’ll eat for a day.
Give a fish a man and he’ll eat for weeks.

Back to Overview