diff --git a/config.toml b/config.toml
index d62db6f..f64f7e9 100644
--- a/config.toml
+++ b/config.toml
@@ -68,3 +68,8 @@ paginate = 5
identifier = "telegram"
name = "Telegram Updates"
url = "https://t.me/cedaei/"
+
+ [[languages.en.menu.main]]
+ identifier = "source"
+ name = "Source"
+ url = "https://git.webionite.com/ceda_ei/cedaei.com"
diff --git a/content/posts/vim-sub-replace-expression.md b/content/posts/vim-sub-replace-expression.md
new file mode 100644
index 0000000..e7f4cea
--- /dev/null
+++ b/content/posts/vim-sub-replace-expression.md
@@ -0,0 +1,80 @@
++++
+title = "Vim: Expressions in replacement text"
+date = "2020-06-14"
+author = "Ceda EI"
+tags = ["vim", "neovim", "replacements"]
+keywords = ["vim", "neovim", "replacements"]
+description = "Modifying the selection in a :s[ubstitute]// command"
+showFullContent = false
++++
+
+Often times I find myself needing to modify the selection in a substitute command in a non-trivial way. From a recent example, I needed to convert the numbers in the `id` of the `div`s to hexadecimal after decrementing them by 1.
+
+Basically, I had to convert
+
+```html
+
+ ...
+
+
+ ...
+
+
+ ...
+
+
+ ...
+
+...
+
+ ...
+
+```
+
+to
+
+```html
+
+ ...
+
+
+ ...
+
+
+ ...
+
+
+ ...
+
+...
+
+ ...
+
+```
+
+Doing this manually is tiring, I could have used macros but I instead chose an even simpler approach.
+
+Vim allows to use expressions in the replacement part of the substitute command if it starts with `\=`. So, the replacement can be simply done using `\=` and `printf`. What I did was simply use the following command after selecting the text in a visual selection.
+
+`:'<,'>s/\v(someprefix)(\d+)/\=printf("%s%X", submatch(1), submatch(2) - 1)`
+
+The breakdown is as follows:
+
+- `:'<,'>`: Sets the range to visual selection.
+- `s/`: Starts the substitution.
+- `\v`: Enables "very magic mode". This allows for writing simpler regular expressions without having to escape special characters.
+- `(someprefix)(\d+)`: Captures the string `someprefix` in group 1 and the number that follows in group 2.
+- `/`: Ends the search and starts replacement.
+- `\=`: Tells Vim to treat the following text as an expression.
+- `printf(`: `printf` is a function that takes a format string and values for the format parameters.
+- `"%s%X"`: The format string. `%s` means to print the parameter as a string. `%X` means to convert the parameter to a hexadecimal number in capital letters (`%x` for small).
+- `submatch(1)`: It retrieves the first matched group.
+- `submatch(2) - 1`: It retrieves the second matched group and subtracts one from it.
+
+### References
+
+- `:help sub-replace-expression`
+- `:help submatch`
+- `:help printf`
+- `:help /magic`
+- `:help :s`