diff --git a/README.md b/README.md
index b50642e..01ab6a0 100644
--- a/README.md
+++ b/README.md
@@ -99,6 +99,8 @@ require("gopher").setup {
Add and remove tags for structs via gomodifytags
+ 
+
By default `json` tag will be added/removed, if not set:
```vim
@@ -176,6 +178,8 @@ require("gopher").setup {
Interface implementation via impl
+ 
+
Syntax of the command:
```vim
:GoImpl [receiver] [interface]
@@ -199,6 +203,8 @@ require("gopher").setup {
Generate boilerplate for doc comments
+ 
+
First set a cursor on **public** package/function/interface/struct and execute:
```vim
@@ -212,6 +218,8 @@ require("gopher").setup {
Generate if err != nil { via iferr
+ 
+
Set the cursor on the line with `err` and execute
```vim
diff --git a/Taskfile.yml b/Taskfile.yml
index 226eed9..62ccd0c 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -1,4 +1,10 @@
version: "3"
+
+includes:
+ vhs:
+ taskfile: ./vhs/Taskfile.yml
+ dir: ./vhs
+
tasks:
lint:
cmds:
diff --git a/vhs/Taskfile.yml b/vhs/Taskfile.yml
new file mode 100644
index 0000000..2dfb107
--- /dev/null
+++ b/vhs/Taskfile.yml
@@ -0,0 +1,20 @@
+version: "3"
+tasks:
+ generate:
+ deps:
+ - comment
+ - iferr
+ - tags
+ - impl
+
+ comment:
+ cmd: vhs comment.tape
+
+ iferr:
+ cmd: vhs iferr.tape
+
+ tags:
+ cmd: vhs tags.tape
+
+ impl:
+ cmd: vhs impl.tape
diff --git a/vhs/comment.gif b/vhs/comment.gif
new file mode 100644
index 0000000..e69de29
diff --git a/vhs/comment.go b/vhs/comment.go
new file mode 100644
index 0000000..3869484
--- /dev/null
+++ b/vhs/comment.go
@@ -0,0 +1,7 @@
+package demos
+
+func doSomethingImportant() {}
+
+type User struct{}
+
+type DataProvider interface{}
diff --git a/vhs/comment.tape b/vhs/comment.tape
new file mode 100644
index 0000000..bc9724b
--- /dev/null
+++ b/vhs/comment.tape
@@ -0,0 +1,34 @@
+Output comment.gif
+Require nvim
+
+Set FontFamily "JetBrains Mono"
+Set Height 800
+Set Width 1500
+Set Padding 20
+Set Shell "bash"
+Set Theme "tokyonight"
+Set TypingSpeed 250ms
+
+Hide
+Type@0ms "alias nvim='./nvim.sh'" Enter
+Type@0ms "clear" Enter
+Show
+
+Type "nvim comment.go" Sleep 150ms Enter
+
+# package
+Type ":GoCmt" Enter Sleep 500ms Escape Sleep 700ms
+
+# func
+Type "3j"
+Type ":GoCmt" Enter Sleep 500ms Escape Sleep 700ms
+
+# struct
+Type "3j"
+Type ":GoCmt" Enter Sleep 500ms Escape Sleep 700ms
+
+# interface
+Type "3j"
+Type ":GoCmt" Enter Sleep 500ms Escape Sleep 700ms
+
+Sleep 5s
diff --git a/vhs/go.mod b/vhs/go.mod
new file mode 100644
index 0000000..bd64a9b
--- /dev/null
+++ b/vhs/go.mod
@@ -0,0 +1,3 @@
+module demos
+
+go 1.25.0
diff --git a/vhs/iferr.gif b/vhs/iferr.gif
new file mode 100644
index 0000000..217dd60
Binary files /dev/null and b/vhs/iferr.gif differ
diff --git a/vhs/iferr.go b/vhs/iferr.go
new file mode 100644
index 0000000..a670571
--- /dev/null
+++ b/vhs/iferr.go
@@ -0,0 +1,11 @@
+package demos
+
+func ifErr() {
+ out, err := doSomething()
+
+ _ = out
+}
+
+func doSomething() (string, error) {
+ return "", nil
+}
diff --git a/vhs/iferr.tape b/vhs/iferr.tape
new file mode 100644
index 0000000..b54e3e7
--- /dev/null
+++ b/vhs/iferr.tape
@@ -0,0 +1,23 @@
+Output iferr.gif
+Require nvim
+Require iferr
+
+Set FontFamily "JetBrains Mono"
+Set Height 800
+Set Width 1500
+Set Padding 20
+Set Shell "bash"
+Set Theme "tokyonight"
+Set TypingSpeed 250ms
+
+Hide
+Type@0ms "alias nvim='./nvim.sh'" Enter
+Type@0ms "clear" Enter
+Show
+
+Type "nvim iferr.go" Sleep 150ms Enter
+
+Type "3j"
+Type ":GoIfErr" Sleep 500ms Enter
+
+Sleep 5s
diff --git a/vhs/impl.gif b/vhs/impl.gif
new file mode 100644
index 0000000..26b6a6a
Binary files /dev/null and b/vhs/impl.gif differ
diff --git a/vhs/impl.go b/vhs/impl.go
new file mode 100644
index 0000000..6f6c0ba
--- /dev/null
+++ b/vhs/impl.go
@@ -0,0 +1,3 @@
+package demos
+
+type CloserExample struct{}
diff --git a/vhs/impl.tape b/vhs/impl.tape
new file mode 100644
index 0000000..b8ef6b5
--- /dev/null
+++ b/vhs/impl.tape
@@ -0,0 +1,23 @@
+Output impl.gif
+Require nvim
+Require iferr
+
+Set FontFamily "JetBrains Mono"
+Set Height 800
+Set Width 1500
+Set Padding 20
+Set Shell "bash"
+Set Theme "tokyonight"
+Set TypingSpeed 250ms
+
+Hide
+Type@0ms "alias nvim='./nvim.sh'" Enter
+Type@0ms "clear" Enter
+Show
+
+Type "nvim impl.go" Sleep 150ms Enter
+
+Type "2j"
+Type ":GoImpl io.Reader" Sleep 500ms Enter
+
+Sleep 5s
diff --git a/vhs/nvim.sh b/vhs/nvim.sh
new file mode 100755
index 0000000..f907eb0
--- /dev/null
+++ b/vhs/nvim.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+nvim --clean -u "../scripts/minimal_init.lua" $@
diff --git a/vhs/tags.gif b/vhs/tags.gif
new file mode 100644
index 0000000..0b2b068
Binary files /dev/null and b/vhs/tags.gif differ
diff --git a/vhs/tags.go b/vhs/tags.go
new file mode 100644
index 0000000..91649d7
--- /dev/null
+++ b/vhs/tags.go
@@ -0,0 +1,12 @@
+package demos
+
+type AddTagsToMe struct {
+ Name string
+ ID int
+ Address string
+ Aliases []string
+ Nested struct {
+ Foo string
+ Bar float32
+ }
+}
diff --git a/vhs/tags.tape b/vhs/tags.tape
new file mode 100644
index 0000000..4888ec5
--- /dev/null
+++ b/vhs/tags.tape
@@ -0,0 +1,36 @@
+Output tags.gif
+Require nvim
+Require gomodifytags
+
+Set FontFamily "JetBrains Mono"
+Set Height 800
+Set Width 1500
+Set Padding 20
+Set Shell "bash"
+Set Theme "tokyonight"
+Set TypingSpeed 250ms
+
+Hide
+Type@0ms "alias nvim='./nvim.sh'" Enter
+Type@0ms "clear" Enter
+Show
+
+Type "nvim tags.go" Sleep 150ms Enter
+
+Type "3j"
+Type ":GoTagAdd json yaml" Sleep 500ms Enter
+Type@120ms ":w" Enter
+Sleep 1s
+
+Type ":GoTagRm json" Sleep 500ms Enter
+Type@120ms ":w" Enter
+Sleep 1s
+
+Type ":GoTagClear" Sleep 500ms Enter
+Type@120ms ":w" Enter
+Sleep 1s
+
+Type "jV2j"
+Type ":GoTagAdd xml" Sleep 500ms Enter
+
+Sleep 5s