diff --git a/after/ftplugin/c.lua b/after/ftplugin/c.lua
new file mode 100644
index 0000000..a65f60e
--- /dev/null
+++ b/after/ftplugin/c.lua
@@ -0,0 +1,3 @@
+local opts = { buffer = true, remap = false, silent = true }
+vim.keymap.set('n', '0', ':PreProcIfWrap<CR>', opts)
+vim.keymap.set('v', '0', ':PreProcIfWrap<CR>', opts)
diff --git a/after/ftplugin/cpp.lua b/after/ftplugin/cpp.lua
index 15e2cfd..8926c8f 100644
--- a/after/ftplugin/cpp.lua
+++ b/after/ftplugin/cpp.lua
@@ -1,2 +1,6 @@
 vim.opt.commentstring = '//%s'
 vim.opt.matchpairs:append('<:>')
+
+local opts = { buffer = true, remap = false, silent = true }
+vim.keymap.set('n', '0', ':PreProcIfWrap<CR>', opts)
+vim.keymap.set('v', '0', ':PreProcIfWrap<CR>', opts)
diff --git a/plugin/commands.lua b/plugin/commands.lua
index e0d7e7d..54838d2 100644
--- a/plugin/commands.lua
+++ b/plugin/commands.lua
@@ -126,3 +126,13 @@ vim.api.nvim_create_user_command('Rg', function(opts)
   end
   require('telescope.builtin').grep_string(grep_opts)
 end, { bang = true, nargs = '*' })
+
+vim.api.nvim_create_user_command('PreProcIfWrap', function(opts)
+  local buffer = vim.api.nvim_get_current_buf()
+  vim.api.nvim_buf_set_lines(
+    buffer, opts.line2, opts.line2, true, { '#endif' })
+  vim.api.nvim_buf_set_lines(
+    buffer, opts.line1 - 1, opts.line1 - 1, true, { '#if 0' })
+  local window = vim.api.nvim_get_current_win()
+  vim.api.nvim_win_set_cursor(window, {opts.line1, 5})
+end, { range = true })