In Markdown files or plain-text files, with wrap enabled, neovim will wrap even inside of words, so you might end up with something like this:
This is a long line with lots and lo\
ts of text.
-- after/ftplugin/markdown.lua
local wrapenabled = true
function ToggleWrap()
if wrapenabled then
vim.opt.linebreak = false
vim.api.nvim_del_keymap("n", "j")
vim.api.nvim_del_keymap("n", "k")
vim.api.nvim_del_keymap("n", "0")
vim.api.nvim_del_keymap("n", "^")
vim.api.nvim_del_keymap("n", "$")
vim.api.nvim_del_keymap("v", "j")
vim.api.nvim_del_keymap("v", "k")
vim.api.nvim_del_keymap("v", "0")
vim.api.nvim_del_keymap("v", "^")
vim.api.nvim_del_keymap("v", "$")
wrapenabled = false
else
vim.opt.linebreak = true
vim.opt.wrap = true
vim.keymap.set("n", "j", "gj", { noremap = true })
vim.keymap.set("n", "k", "gk", { noremap = true })
vim.keymap.set("n", "0", "g0", { noremap = true })
vim.keymap.set("n", "^", "g^", { noremap = true })
vim.keymap.set("n", "$", "g$", { noremap = true })
vim.keymap.set("v", "j", "gj", { noremap = true })
vim.keymap.set("v", "k", "gk", { noremap = true })
vim.keymap.set("v", "0", "g0", { noremap = true })
vim.keymap.set("v", "^", "g^", { noremap = true })
vim.keymap.set("v", "$", "g$", { noremap = true })
wrapenabled = true
end
end
vim.keymap.set("n", "<leader>w", ToggleWrap, { desc = "Toggle soft wrap mode" })