Site set up, first post written. Now for the day-to-day, finding posts again, maintaining front matter, toggling drafts, renaming, deleting. Every command runs through :Hugo … and you can bind it to a leader key.
Finding Posts Again
:Hugo open
<leader>ho opens a picker over all content in the active site. Each language version of a bundle shows on its own row. A typical view:
-- posts/2026/hello Hello world
d -- drafts/wip Work in progress
-- posts/2026/my-first-post My first post
de posts/2026/my-first-post My first post
The columns, left to right: draft flag (d for drafts, blank otherwise), language, path under content/, title. Enter opens the file.
The language column reflects the filename suffix, so de for index.de.md, fr for index.fr.md. -- means the file has no language suffix (e.g. plain index.md), and Hugo treats it as the default language. If your defaultContentLanguage is en, every -- row is an English page.
:Hugo resume
<leader>hr jumps back to the last post you had open. It works across Neovim restarts, because the plugin remembers the last position per site. Handy when you stopped halfway through the night before.
:Hugo search
<leader>hs runs a full-text search over content/. When you don’t remember the title but you do remember a phrase from the body, this is the tool. You need ripgrep on the shell, the picker backend rides on the LazyVim stack.
:Hugo filebrowser
<leader>hf opens the current buffer’s directory in Finder (on macOS) or your Linux file manager. If your current buffer isn’t part of the active site, it opens the site root instead.
Editing the Current Post’s Front Matter
These commands need a content file in the active buffer. They edit the front matter inside the buffer (not directly on disk) and sync across language siblings in the bundle so translations don’t drift.
:Hugo draft
<leader>hd toggles the draft flag in the current buffer. In a multilingual bundle, the flag is propagated across all language versions, keeping drafts consistently drafts.
:Hugo tags and :Hugo categories
<leader>ht and <leader>hc open a picker over every tag (or category) that’s been used anywhere in the site. The ones already set on the current post are marked [x] at the top, the rest sit below as [ ]. A + Create new… entry at the bottom lets you add a value that doesn’t exist yet.
[x] photography
[x] travel
[ ] food
[ ] music
[ ] neovim
[ ] + Create new…
Enter toggles the highlighted row and reopens the picker, so you can add and remove several values in one go without restarting the command. Esc closes it. The final set is written to the front matter, synced across all language siblings.
Renaming and Deleting
:Hugo rename
<leader>hR renames a content file or a whole bundle. The picker chooses the post, then you type the new path. Bundles move as whole directories, single-file posts as files. You can leave off the .md suffix.
Example: rename posts/2026/hello.md to posts/2026/hello-world.md by entering posts/2026/hello-world. To move it into a different section, include the new parent: blog/2026/hello-world.
:Hugo delete
<leader>hD deletes a post, with a confirmation. For bundles, a second prompt asks for the scope:
- Whole bundle removes the directory, all language files, and any bundled resources like images next to
index.md. - This language file only removes only the picked language file, leaves
index.mdand other translations alone. Use this to retire a single translation.
Safety note: rename and delete touch the filesystem. Gone is gone. A version-controlled site with Git underneath takes the edge off.
Where Things Go From Here
That covers the day-to-day around posts. How embedding images, attachments and shortcodes works, and how preview and deployment run, is the topic of the post on media library, preview and deploy.