The work on vim-surround [1] by tpope [2].
surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease
References:
[1]: https://github.com/tpope/vim-surround
[2]: https://github.com/tpope
Published
All published posts
2493 posts
latest post 2026-05-11
Publishing rhythm
If you’re into interesting projects, don’t miss out on kedro-starters [1], created by kedro-org [2].
Templates for your Kedro projects.
References:
[1]: https://github.com/kedro-org/kedro-starters
[2]: https://github.com/kedro-org
Save Vim Macro
If you are like me, you have created a macro or two that is pure glory, and you forget how you made it after a day or so, or you immediately want to store it away as a custom keybinding. As with most things with vim, it’s easy to do once you understand it.
Creating a Macro # [1]
One of the earliest things we all learn to do in vim is to create macros, custom sets of functionality stored in a register that can be replayed later.
To create a macro, get into normal mode, then type q followed by a letter that you want to store the macro under.
qq
Note: a common throw-away macro register is q because it’s easy to hit qq from normal mode to start recording.
Replaying a Macro # [2]
Macros can be replayed using @ followed by the letter that you stored the macro under.
@q
Registers # [3]
Registers are nothing more than a single character key mapping to a value of some text. As you yank, delete, or create macros in vim, it automatically stores text into these registers.
When you hit...
Live Substitution In Neovim
Replacing text in vim can be quite frustrating especially since it doesn’t have
live feedback to what is changing. Today I was watching Josh Branchaud’s
Vim-Unalphabet series on Youtuve and realized that his vim was doing this and I
had to have it.
https://twitter.com/_WaylonWalker/status/1346081617199198210
How to do it # [1]
I had to do a bit of searching and found a great post from vimcasts [2] that shows exactly how to get the live search and replace highlighting using inccomand
:h inccommand # [3]
'inccommand' 'icm' string (default "")
global
"nosplit": Shows the effects of a command incrementally, as you type.
"split" : Also shows partial off-screen results in a preview window.
Works for |:substitute|, |:smagic|, |:snomagic|. |hl-Substitute|
If the preview is too slow (exceeds 'redrawtime') then 'inccommand' is
automatically disabled until |Command-line-mode| is done.
Add this to your config # [4]
I believe that this is a neovim only feature, add it into your
~...
khzaw [1] has done a fantastic job with vim-conceal [2]. Highly recommend taking a look.
A vim plugin making use of vim’s conceal feature for additional visual eyecandy.
References:
[1]: https://github.com/khzaw
[2]: https://github.com/khzaw/vim-conceal
Newsboat
Web browsers are a black hole of productivity. I try to use them as little as
possible when it is time to focus. I try to use help, ?, or ?? with
ipython, or –help at the command line as much as possible. What about that
time I am trying to see what my online friends are posting on their sites? I
used to used google reader quite heavily before that was taken down.
Newsboat # [1]
I am going to give a terminal rss reader a try for a bit and see how that goes
for me. I have really struggled to get into an rss reader since google reader
died.
installation # [2]
I installed with the reccomended snap for Ubuntu.
sudo snap install newsboat
Adding feeds # [3]
super simple
Running help for newsboat directed me towards their config files at the bottom.
❯ newsboat --help
newsboat r2.22
usage: /snap/newsboat/3849/usr/local/bin/newsboat [-i <file>|-e] [-u <urlfile>] [-c <cachefile>] [-x <command> ...] [-h]
-e, --export-to-opml export OPML feed to stdout
-r, --refresh-on-start refresh f...
Large Refactor At The Command Line
As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.
git # [2]
Before you start mucking up a project with wild commands at the terminal check that you have a super clean git status. We may make some mistakes and need a way to undo 100’s files and git makes it really easy if you start with a clean history.
git status
If we are ready to begin work we should see a response like this.
On branch main
nothing to commit, working tree clean
It would also be wise to do this inside of a branch. The minute you try to do something wild in your working branch someone will walk by and ask you to do a five-minute task, but your deep in refactoring and haven’t left yourself a clean way back.
git branch my-big-refactor
grepr # [3]
Time for the meat of this refactor replacing text across our project. I often will pop this bash function into my terminal session and tweak it as needed. This...
Ipython-Config
I use my ipython terminal daily. It’s my go to way of running python most of
the time. After you use it for a little bit you will probably want to setup a
bit of your own configuration.
install ipython # [1]
Activate your virtual environment [2] of choice and pip install it. Any time you
are running your project in a virtual environment, you will need to install
ipython inside it to access those packages from ipython.
pip install ipython
You are using a virtual environment right? Virtual environments like venv or
conda can save you a ton of pain down the road.
profile_default # [3]
When you install ipython you start out with no config at all. Runnign ipython profile create will start a new profile called profile_default that contains
all of the default configuration.
ipython profile create
This command will create a directory ~/.ipython/profile_default
multiple configurations # [4]
You can run multiple configurations by naming them with ipython profile create [profile_name...
Custom Ipython Prompt
I’ve grown tired of the standard ipython prompt as it doesn’t do much to give
me any useful information. The default one gives out a line number that only
seems to add anxiety as I am working on a simple problem and see that number
grow to several hundred. I start to question my ability 🤦♂️.
Configuration # [1]
If you already have an ipython config you can move on otherwise check out this
post on creating an ipython config.
Ipython-Config [2]
The Dream Prompt # [3]
I want something similar to the starship prompt I am using in the
shell. I want to be able to quickly see my python version,
environment name, and git [4] branch.
- python version
- active environment
- git branch
[5]
This is my zsh prompt I am using for inspiration
Basic Prompt # [6]
This is mostly boilerplate that I found from various google
searches, but this gets me a basic green chevron as my prompt.
from IPython.terminal.prompts import Prompts, Token
class MyPrompt(Prompts):
def in_prompt_tokens(self...
I’m impressed by vim-tmux-runner [1] from christoomey [2].
Vim and tmux, sittin’ in a tree…
References:
[1]: https://github.com/christoomey/vim-tmux-runner
[2]: https://github.com/christoomey
I like fkromer’s [1] project awesome-kedro [2].
No description available.
References:
[1]: https://github.com/fkromer
[2]: https://github.com/fkromer/awesome-kedro
Just starred machfiles [1] by ChristianChiarulli [2]. It’s an exciting project with a lot to offer.
The dotfiles you see in all my videos
References:
[1]: https://github.com/ChristianChiarulli/machfiles
[2]: https://github.com/ChristianChiarulli
Check out LunarVim [1] and their project LunarVim [2].
🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.
References:
[1]: https://github.com/LunarVim
[2]: https://github.com/LunarVim/LunarVim
Looking for inspiration? joelhooks-com [1] by joelhooks [2].
playing with static pages
References:
[1]: https://github.com/joelhooks/joelhooks-com
[2]: https://github.com/joelhooks
Automating my Post Starter
One thing we all dread is mundane work of getting started, and all the hoops it
takes to get going. This year I want to post more often and I am taking some
steps towards making it easier for myself to just get started.
When I start a new post I need to cd into my blog directory, start neovim in a
markdown file with a clever name, copy some frontmatter boilerplate, update the
post date, add tags, a description, and a cover.
Todo List for starting a post # [1]
- frontmatter template
- Title
- slug
- tags
- date
- cover
- description
- create markdown file
- open in neovim
Lets Automate this # [2]
This aint no proper cli # [3]
hot and fast
As with many thing running behind the scenes on this site, I am the one and
only user, I have limited time, so this is going to be a bit hot and fast.
Let’s create a file called new-post.
start the script new-post
#!python
# new-post
👆 Works on my machine
If this were something that had more users than me I would probably use
some...
Windowing Python Lists
In python data science we often will reach for pandas a bit more than
necessary. While pandas can save us so much there are times where there are
alternatives that are much simpler. The itertoolsandmore-itertools` are
full of cases of this.
This post is a walkthrough of me solving a problem with more-itertools rather
than reaching for a for loop, or pandas.
I am working on a one-line-link expander for my blog. I ended up doing it,
just by modifying the markdown with python. I first split the post into lines
with content.split('\n'), then look to see if the line appears to be just a
link. One more safety net that I wanted to add was to check if there was
whitespace around the line, this could not simply be done in a list
comprehension by itself. I need just a bit of knowledge of the surrounding
lines, enter more-itertools.
simplified rendering function # [1]
I have a function that will check to see if the line should be expanded, then
render the correct template. Fist step is to ...
WaylonWalker [1] has done a fantastic job with devtainer [2]. Highly recommend taking a look.
🐳 (dotfiles) My personal development docker container base image
References:
[1]: https://github.com/WaylonWalker
[2]: https://github.com/WaylonWalker/devtainer
WaylonWalker [1] has done a fantastic job with WaylonWalker [2]. Highly recommend taking a look.
Learning in public
References:
[1]: https://github.com/WaylonWalker
[2]: https://github.com/WaylonWalker/WaylonWalker
Check out aoc [1] by ThePrimeagen [2]. It’s a well-crafted project with great potential.
2020
References:
[1]: https://github.com/ThePrimeagen/aoc
[2]: https://github.com/ThePrimeagen
Check out ZaxR [1] and their project bulwark [2].
Bulwark is a package for convenient property-based testing of pandas dataframes.
References:
[1]: https://github.com/ZaxR
[2]: https://github.com/ZaxR/bulwark