Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Very cool! A while ago i did something similar and tried to learn vim more in depth by creating some more complex macros - several of them, to convert some text snippets into markdown. Problem was, that several months later i could not exactly remember some details of these "reusable" macros - where exactly to place cursor when starting them, the order of execution and so on. Thankfully, vim has the amazing ability to run commands/script on text selection, so i rewrote my macros in a scripting language. It has several bonus points: i can store them in git and track changes, code can be self-documented via comments. My macros were not too complex, but still, using a proper scripting ended up being much better.


Macroing Tip: whenever possible start a macro with a motion that will move the cursor to a known location. E.g. for line-oriented macros use "0" and for paragraph oriented macros use "}{". Then the macro will work regardless of where you put the cursor.


Perfect! Great advice


Insightful! I have had the same issue with forgetting where exactly I need the cursor. I did not know you could run script/commands on text selection, I will definitely look into this. The extent of my vimscript journey so far is directly making system() calls to external scripts, and I've been using the ability to Ctrl-R while entering a :command to dump yanked text as a crutch. Your approach sounds much more sensible.


Glad you find it useful. Below is an example script to demonstrate the concept. It is awesomely powerful. In vim, select some text and do this:

  :'<,'>! ./example.py

  #!/bin/env python3
  #:'<,'>! ./example.py # ← this is how to use it
  import sys
  data = sys.stdin.readlines()
  for l in data:
    l = l.replace("a", "e").rstrip()
    print(l)




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: