From e1a37db1f40b47ef6b3c2240838e93b3be77a165 Mon Sep 17 00:00:00 2001 From: Ivan Sukhankin Date: Wed, 26 Nov 2025 23:38:20 +0300 Subject: [PATCH 1/3] review for nvim luasnip.lua --- nvim/.config/nvim/lua/plugins/luasnip.lua | 46 ++++++++++++----------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/nvim/.config/nvim/lua/plugins/luasnip.lua b/nvim/.config/nvim/lua/plugins/luasnip.lua index 2b8242d..0853466 100644 --- a/nvim/.config/nvim/lua/plugins/luasnip.lua +++ b/nvim/.config/nvim/lua/plugins/luasnip.lua @@ -1,25 +1,27 @@ return { { - "L3MON4D3/LuaSnip", - -- follow latest release. - version = "v2.*", -- Replace by the latest released major (first number of latest release) - -- install jsregexp (optional!). - build = "make install_jsregexp", - config = function() - local ls = require("luasnip") - ls.config.set_config({ - enable_autosnippets = true, - }) - require("luasnip.loaders.from_lua").lazy_load({paths = "~/.config/nvim/snippets"}) - vim.keymap.set({"i"}, "", function() ls.expand() end, {silent = true}) - vim.keymap.set({"i", "s"}, "jk", function() ls.jump( 1) end, {silent = true}) - vim.keymap.set({"i", "s"}, "jl", function() ls.jump(-1) end, {silent = true}) - vim.keymap.set({"i", "s"}, "", function() - if ls.choice_active() then - ls.change_choice(1) - end - end, {silent = true}) - end, -}, + "L3MON4D3/LuaSnip", + -- follow latest release. + version = "v2.*", -- Replace by the latest released major (first number of latest release) + -- install jsregexp (optional!). + build = "make install_jsregexp", + config = function() + local ls = require("luasnip") + ls.config.set_config({ + enable_autosnippets = true, + -- NOTE: check ft_func = cursor_pos + -- NOTE: check update_event + }) + require("luasnip.loaders.from_lua").lazy_load({ paths = "./snippets" }) + -- TODO: rewrite this with lazy keys, and use ls.jumpable(1) + vim.keymap.set({ "i" }, "", function() ls.expand() end, { silent = true }) + vim.keymap.set({ "i", "s" }, "jk", function() ls.jump(1) end, { silent = true }) + vim.keymap.set({ "i", "s" }, "jl", function() ls.jump(-1) end, { silent = true }) + vim.keymap.set({ "i", "s" }, "", function() + if ls.choice_active() then + ls.change_choice(1) + end + end, { silent = true }) + end, + }, } - From 83300a637e1532dc3ef9b4ac80f4156f5923eb7b Mon Sep 17 00:00:00 2001 From: Ivan Sukhankin Date: Thu, 27 Nov 2025 00:05:33 +0300 Subject: [PATCH 2/3] nvim review: base changes --- nvim/.config/nvim/lua/core/keymaps.lua | 8 +++- nvim/.config/nvim/lua/plugins/leap.lua | 2 - nvim/.config/nvim/lua/plugins/lsp-config.lua | 44 ++++++++++--------- .../nvim/lua/plugins/mason-lspconfig.lua | 5 ++- .../nvim/lua/plugins/nvim-surround.lua | 7 +-- nvim/.config/nvim/lua/plugins/peak.lua | 1 + .../nvim/lua/plugins/render-markdown.lua | 6 +-- nvim/.config/nvim/lua/plugins/telescope.lua | 18 +++++--- .../nvim/lua/plugins/tmux-navigator.lua | 9 ++-- nvim/.config/nvim/lua/plugins/treesitter.lua | 4 +- nvim/.config/nvim/lua/plugins/vimtex.lua | 27 +++++------- nvim/.config/nvim/lua/plugins/vivify.lua | 2 +- 12 files changed, 68 insertions(+), 65 deletions(-) diff --git a/nvim/.config/nvim/lua/core/keymaps.lua b/nvim/.config/nvim/lua/core/keymaps.lua index 1011168..ff47b04 100644 --- a/nvim/.config/nvim/lua/core/keymaps.lua +++ b/nvim/.config/nvim/lua/core/keymaps.lua @@ -3,17 +3,19 @@ vim.g.mapleader = "," local set = vim.keymap.set set("i", "jj", "") +-- NOTE: check packadd nohlsearch set("n", "nh", ":nohl") set("n", "to", ":tabnew") set("n", "tq", ":tabclose") +-- NOTE: default gt and gT set("n", "tl", ":tabn") set("n", "th", ":tabp") -set("n", "rn", ":set relativenumber!") +set("n", "rn", ":set relativenumber!") set("n", "ih", function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) -end, { desc = "toggle inlay_hints"} +end, { desc = "toggle inlay_hints" } ) vim.api.nvim_create_user_command("W", function() @@ -21,4 +23,6 @@ vim.api.nvim_create_user_command("W", function() vim.cmd([[autocmd TermClose * ++once lua vim.cmd("bdelete!")]]) end, { nargs = 0 }) +-- FIX: maybe move this to telescope.lua +-- UPD: just nuke this set("n", "", "Telescope buffers sort_mru=true sort_lastused=true initial_mode=normal") diff --git a/nvim/.config/nvim/lua/plugins/leap.lua b/nvim/.config/nvim/lua/plugins/leap.lua index d893f60..5dc8b8b 100644 --- a/nvim/.config/nvim/lua/plugins/leap.lua +++ b/nvim/.config/nvim/lua/plugins/leap.lua @@ -1,5 +1,3 @@ return { - { "ggandor/leap.nvim", - } } diff --git a/nvim/.config/nvim/lua/plugins/lsp-config.lua b/nvim/.config/nvim/lua/plugins/lsp-config.lua index 8ca5535..30faa31 100644 --- a/nvim/.config/nvim/lua/plugins/lsp-config.lua +++ b/nvim/.config/nvim/lua/plugins/lsp-config.lua @@ -2,11 +2,13 @@ return { { "neovim/nvim-lspconfig", config = function() + -- NOTE: use enabled list vim.lsp.enable('clangd') vim.lsp.enable('texlab') vim.lsp.enable('asm_lsp') vim.diagnostic.config({ + -- NOTE: use global settings for float windows float = { border = "single", }, @@ -14,28 +16,28 @@ return { update_in_insert = true, }) - vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('my.lsp', {}), - callback = function(args) - local client = assert(vim.lsp.get_client_by_id(args.data.client_id)) - if client:supports_method('textDocument/implementation') then - -- Create a keymap for vim.lsp.buf.implementation ... - end + vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('my.lsp', {}), + callback = function(args) + local client = assert(vim.lsp.get_client_by_id(args.data.client_id)) + if client:supports_method('textDocument/implementation') then + -- Create a keymap for vim.lsp.buf.implementation ... + end - -- Auto-format ("lint") on save. - -- Usually not needed if server supports "textDocument/willSaveWaitUntil". - if not client:supports_method('textDocument/willSaveWaitUntil') - and client:supports_method('textDocument/formatting') then - vim.api.nvim_create_autocmd('BufWritePre', { - group = vim.api.nvim_create_augroup('my.lsp', {clear=false}), - buffer = args.buf, - callback = function() - vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 }) - end, - }) - end - end, - }) + -- Auto-format ("lint") on save. + -- Usually not needed if server supports "textDocument/willSaveWaitUntil". + if not client:supports_method('textDocument/willSaveWaitUntil') + and client:supports_method('textDocument/formatting') then + vim.api.nvim_create_autocmd('BufWritePre', { + group = vim.api.nvim_create_augroup('my.lsp', { clear = false }), + buffer = args.buf, + callback = function() + vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 }) + end, + }) + end + end, + }) end, } } diff --git a/nvim/.config/nvim/lua/plugins/mason-lspconfig.lua b/nvim/.config/nvim/lua/plugins/mason-lspconfig.lua index a4f3707..99e4c36 100644 --- a/nvim/.config/nvim/lua/plugins/mason-lspconfig.lua +++ b/nvim/.config/nvim/lua/plugins/mason-lspconfig.lua @@ -1,10 +1,11 @@ +-- FIX: move this to mason.lua return { { "mason-org/mason-lspconfig.nvim", opts = {}, dependencies = { - { "mason-org/mason.nvim", opts = {} }, - "neovim/nvim-lspconfig", + { "mason-org/mason.nvim", opts = {} }, + "neovim/nvim-lspconfig", }, } } diff --git a/nvim/.config/nvim/lua/plugins/nvim-surround.lua b/nvim/.config/nvim/lua/plugins/nvim-surround.lua index 30e5b30..bc4fea7 100644 --- a/nvim/.config/nvim/lua/plugins/nvim-surround.lua +++ b/nvim/.config/nvim/lua/plugins/nvim-surround.lua @@ -3,10 +3,11 @@ return { "kylechui/nvim-surround", version = "^3.0.0", -- Use for stability; omit to use `main` branch for the latest features event = "VeryLazy", + -- FIX: just use opts = true config = function() - require("nvim-surround").setup({ - -- Configuration here, or leave empty to use defaults - }) + require("nvim-surround").setup({ + -- Configuration here, or leave empty to use defaults + }) end } } diff --git a/nvim/.config/nvim/lua/plugins/peak.lua b/nvim/.config/nvim/lua/plugins/peak.lua index 8ec7e01..e56c944 100644 --- a/nvim/.config/nvim/lua/plugins/peak.lua +++ b/nvim/.config/nvim/lua/plugins/peak.lua @@ -27,6 +27,7 @@ return { throttle_time = 'auto', -- minimum amount of time in milliseconds -- that has to pass before starting new render }) + FIX: use lazy cmd vim.api.nvim_create_user_command("PeekOpen", require("peek").open, {}) vim.api.nvim_create_user_command("PeekClose", require("peek").close, {}) end, diff --git a/nvim/.config/nvim/lua/plugins/render-markdown.lua b/nvim/.config/nvim/lua/plugins/render-markdown.lua index f135d4d..b4eb1cd 100644 --- a/nvim/.config/nvim/lua/plugins/render-markdown.lua +++ b/nvim/.config/nvim/lua/plugins/render-markdown.lua @@ -1,6 +1,4 @@ return { - { - 'MeanderingProgrammer/render-markdown.nvim', - opts = {}, -}, + 'MeanderingProgrammer/render-markdown.nvim', + opts = {}, } diff --git a/nvim/.config/nvim/lua/plugins/telescope.lua b/nvim/.config/nvim/lua/plugins/telescope.lua index 9ee1c68..49e8911 100644 --- a/nvim/.config/nvim/lua/plugins/telescope.lua +++ b/nvim/.config/nvim/lua/plugins/telescope.lua @@ -1,11 +1,12 @@ return { - 'nvim-telescope/telescope.nvim', tag = '0.1.8', + 'nvim-telescope/telescope.nvim', + tag = '0.1.8', -- or , branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim' }, config = function() local telescope = require("telescope") - local set = vim.keymap.set local act = require("telescope.actions") + -- TODO: use opts = { default ... } telescope.setup({ defaults = { path_display = { "smart" }, @@ -23,10 +24,13 @@ return { }) end, keys = { - {'ff', function() require('telescope.builtin').find_files() end, desc = 'Telescope find files'}, - {'fg', function() require('telescope.builtin').live_grep() end, desc = 'Telescope live grep'}, - {'fb', "Telescope buffers sort_mru=true sort_lastused=true initial_mode=normal", - desc = 'Telescope buffers'}, - {'fh', function() require('telescope.builtin').help_tags() end, desc = 'Telescope help tags'}, + { 'ff', function() require('telescope.builtin').find_files() end, desc = 'Telescope find files' }, + { 'fg', function() require('telescope.builtin').live_grep() end, desc = 'Telescope live grep' }, + { + 'fb', + "Telescope buffers sort_mru=true sort_lastused=true initial_mode=normal", + desc = 'Telescope buffers' + }, + { 'fh', function() require('telescope.builtin').help_tags() end, desc = 'Telescope help tags' }, } } diff --git a/nvim/.config/nvim/lua/plugins/tmux-navigator.lua b/nvim/.config/nvim/lua/plugins/tmux-navigator.lua index 3756969..b36f987 100644 --- a/nvim/.config/nvim/lua/plugins/tmux-navigator.lua +++ b/nvim/.config/nvim/lua/plugins/tmux-navigator.lua @@ -1,19 +1,18 @@ return { - { 'alexghergh/nvim-tmux-navigation', config = function() - + 'alexghergh/nvim-tmux-navigation', + config = function() local nvim_tmux_nav = require('nvim-tmux-navigation') nvim_tmux_nav.setup { - disable_when_zoomed = true -- defaults to false + disable_when_zoomed = true -- defaults to false } + -- TODO: use lazy keys (why use this plugin anyway) vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateLeft) vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateDown) vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateUp) vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateRight) vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateLastActive) vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateNext) - end } -} diff --git a/nvim/.config/nvim/lua/plugins/treesitter.lua b/nvim/.config/nvim/lua/plugins/treesitter.lua index 3d36b6d..091e87f 100644 --- a/nvim/.config/nvim/lua/plugins/treesitter.lua +++ b/nvim/.config/nvim/lua/plugins/treesitter.lua @@ -1,5 +1,3 @@ return { - { - "nvim-treesitter/nvim-treesitter", - } + "nvim-treesitter/nvim-treesitter", } diff --git a/nvim/.config/nvim/lua/plugins/vimtex.lua b/nvim/.config/nvim/lua/plugins/vimtex.lua index 2534feb..b435ed5 100644 --- a/nvim/.config/nvim/lua/plugins/vimtex.lua +++ b/nvim/.config/nvim/lua/plugins/vimtex.lua @@ -1,17 +1,14 @@ return { - { - "lervag/vimtex", - lazy = true, - init = function() - vim.g.vimtex_view_method = "zathura" - vim.g.tex_flavor = "latex" - vim.g.vimtex_quickfix_mode = 0 - vim.g.tex_conceal = "abdmg" - vim.cmd("filetype plugin on") - end, - config = function() - vim.opt.conceallevel = 1 - end, - }, + "lervag/vimtex", + lazy = true, + init = function() + vim.g.vimtex_view_method = "zathura" + vim.g.tex_flavor = "latex" + vim.g.vimtex_quickfix_mode = 0 + vim.g.tex_conceal = "abdmg" + vim.cmd("filetype plugin on") + end, + config = function() + vim.opt.conceallevel = 1 + end, } - diff --git a/nvim/.config/nvim/lua/plugins/vivify.lua b/nvim/.config/nvim/lua/plugins/vivify.lua index 8999622..68db4a4 100644 --- a/nvim/.config/nvim/lua/plugins/vivify.lua +++ b/nvim/.config/nvim/lua/plugins/vivify.lua @@ -1,3 +1,3 @@ return { - { "jannis-baum/vivify.vim" } + "jannis-baum/vivify.vim" } From da291e56d69823d12bed07033048449f26b88c95 Mon Sep 17 00:00:00 2001 From: Ivan Sukhankin Date: Thu, 27 Nov 2025 00:19:25 +0300 Subject: [PATCH 3/3] nvim review: luasnip --- nvim/.config/nvim/snippets/tex.lua | 222 +++++++++++++++-------------- 1 file changed, 115 insertions(+), 107 deletions(-) diff --git a/nvim/.config/nvim/snippets/tex.lua b/nvim/.config/nvim/snippets/tex.lua index 7c436e7..a6022cd 100644 --- a/nvim/.config/nvim/snippets/tex.lua +++ b/nvim/.config/nvim/snippets/tex.lua @@ -1,3 +1,7 @@ +-- NOTE: you dont need to require all this stuff +-- this dynamicly links when loads in luasnip.lua +-- check luasnip doc.md and snip_env +-- https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md#lua local ls = require("luasnip") local s = ls.snippet local sn = ls.snippet_node @@ -26,164 +30,168 @@ local parse = require("luasnip.util.parser").parse_snippet local ms = ls.multi_snippet local k = require("luasnip.nodes.key_indexer").new_key +-- NOTE: check luasnip wiki https://github.com/L3MON4D3/LuaSnip/wiki/Misc#mathematical-context-detection-for-conditional-expansion-without-relying-on-vimtexs-in_mathzone +-- what if u wanna use math snippets in markdown files local tex = {} tex.in_math = function() - return vim.fn['vimtex#syntax#in_mathzone']() == 1 + return vim.fn['vimtex#syntax#in_mathzone']() == 1 end tex.in_text = function() - return not tex.in_math() + return not tex.in_math() end local rec_ls rec_ls = function() - return sn(nil, { - c(1, { - -- important!! Having the sn(...) as the first choice will cause infinite recursion. - t({""}), - -- The same dynamicNode as in the snippet (also note: self reference). - sn(nil, {t({"", "\t\\item "}), i(1), d(2, rec_ls, {})}), - }), - }); + return sn(nil, { + c(1, { + -- important!! Having the sn(...) as the first choice will cause infinite recursion. + t({ "" }), + -- The same dynamicNode as in the snippet (also note: self reference). + sn(nil, { t({ "", "\t\\item " }), i(1), d(2, rec_ls, {}) }), + }), + }); end +-- TODO: pls refactor this, use tables for different snippets groups +-- NOTE: check extend_decorator +-- also you can use parse() for basic snippets return { - s({trig="ls"}, { - t({"\\begin{itemize}", - "\t\\item "}), i(1), d(2, rec_ls, {}), - t({"", "\\end{itemize}"}), i(0) -}), - s( - { trig = ";i", snippetType = "autosnippet" }, - fmta( - [[ + s({ trig = "ls" }, { + t({ "\\begin{itemize}", + "\t\\item " }), i(1), d(2, rec_ls, {}), + t({ "", "\\end{itemize}" }), i(0) + }), + s( + { trig = ";i", snippetType = "autosnippet" }, + fmta( + [[ \item <> ]], - { - i(1), - } - ) - ), - - s( - { trig = "dm", snippetType = "autosnippet" }, - fmta("\\[\n<>\n\\]", { - i(1), - }) - ), - - s( - { trig = "mk", snippetType = "autosnippet" }, - fmta("$<>$", { - i(1), - }) - ), - - s( - { trig = "sum", snippetType = "autosnippet", condition = tex.in_math }, - fmta( - [[ + { + i(1), + } + ) + ), + + s( + { trig = "dm", snippetType = "autosnippet" }, + fmta("\\[\n<>\n\\]", { + i(1), + }) + ), + + s( + { trig = "mk", snippetType = "autosnippet" }, + fmta("$<>$", { + i(1), + }) + ), + + s( + { trig = "sum", snippetType = "autosnippet", condition = tex.in_math }, + fmta( + [[ \sum_{<>}^{<>} <> ]], - { - i(1), - i(2), - i(3), - } - ) - ), - - s( - { trig = "int", snippetType = "autosnippet", condition = tex.in_math }, - fmta( - [[ + { + i(1), + i(2), + i(3), + } + ) + ), + + s( + { trig = "int", snippetType = "autosnippet", condition = tex.in_math }, + fmta( + [[ \int_{<>}^{<>} <> \,d<> ]], - { - i(1), - i(2), - i(3), - i(4), - } - ) - ), + { + i(1), + i(2), + i(3), + i(4), + } + ) + ), - s( - { trig = ";al", snippetType = "autosnippet" }, - fmta("\\begin{align*}\n<>\n\\end{align*}", { - i(1), - }) - ), + s( + { trig = ";al", snippetType = "autosnippet" }, + fmta("\\begin{align*}\n<>\n\\end{align*}", { + i(1), + }) + ), - s({ trig = "bb", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\mathbb{<>}", { i(1)})), + s({ trig = "bb", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\mathbb{<>}", { i(1) })), - s({ trig = "sq", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\sqrt{<>}", { i(1)})), + s({ trig = "sq", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\sqrt{<>}", { i(1) })), - s({ trig = "cl", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\mathcal{<>}", { i(1)})), + s({ trig = "cl", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\mathcal{<>}", { i(1) })), - s({ trig = "wh", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\widehat{<>}", { i(1)})), + s({ trig = "wh", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\widehat{<>}", { i(1) })), - s({ trig = "ol", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\overline{<>}", { i(1)})), + s({ trig = "ol", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\overline{<>}", { i(1) })), - s({ trig = "ora", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\overrightarrow{<>}", { i(1)})), + s({ trig = "ora", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\overrightarrow{<>}", { i(1) })), - s({ trig = "ob", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\overbrace{<>}", { i(1)})), + s({ trig = "ob", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\overbrace{<>}", { i(1) })), - s({ trig = "ub", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\underbrace{<>}", { i(1)})), + s({ trig = "ub", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\underbrace{<>}", { i(1) })), s({ trig = "([^%s/]+)^", regTrig = true, snippetType = "autosnippet", condition = tex.in_math }, - fmta("<>^{<>}", { f(function(_, snip) return snip.captures[1] end), i(1) })), + fmta("<>^{<>}", { f(function(_, snip) return snip.captures[1] end), i(1) })), s({ trig = "([^%s/]+)_", regTrig = true, snippetType = "autosnippet", condition = tex.in_math }, - fmta("<>_{<>}", { f(function(_, snip) return snip.captures[1] end), i(1) })), + fmta("<>_{<>}", { f(function(_, snip) return snip.captures[1] end), i(1) })), - s({ trig = "xrr", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\xrightarrow[<>]{<>}", { i(1), i(2)})), - - s({ trig = "ff", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\frac{<>}{<>}", { i(1), i(2)})), + s({ trig = "xrr", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\xrightarrow[<>]{<>}", { i(1), i(2) })), + s({ trig = "ff", snippetType = "autosnippet", condition = tex.in_math }, fmta("\\frac{<>}{<>}", { i(1), i(2) })), s( { trig = "beg", snippetType = "autosnippet" }, fmta( - "\\begin{<>}\n\t<>\n\\end{<>}", - { - i(1), - i(2), - rep(1), - } + "\\begin{<>}\n\t<>\n\\end{<>}", + { + i(1), + i(2), + rep(1), + } ) -), + ), s( { trig = "([^%s=/]+)/", regTrig = true, wordTrig = false, snippetType = "autosnippet", condition = tex.in_math }, fmta( - "\\frac{<>}{<>}", - { - f(function(_, snip) return snip.captures[1] end), - i(1), - } + "\\frac{<>}{<>}", + { + f(function(_, snip) return snip.captures[1] end), + i(1), + } ) -), + ), + + s({ trig = ";p", snippetType = "autosnippet", condition = tex.in_math }, t("\\varphi")), - s({ trig = ";p", snippetType = "autosnippet", condition = tex.in_math }, t("\\varphi")), + s({ trig = "Rr", snippetType = "autosnippet", condition = tex.in_math }, t("\\Rightarrow")), - s({ trig = "Rr", snippetType = "autosnippet", condition = tex.in_math }, t("\\Rightarrow")), + s({ trig = "Lr", snippetType = "autosnippet", condition = tex.in_math }, t("\\Leftarrow")), - s({ trig = "Lr", snippetType = "autosnippet", condition = tex.in_math }, t("\\Leftarrow")), + s({ trig = "rr", snippetType = "autosnippet", condition = tex.in_math }, t("\\rightarrow")), - s({ trig = "rr", snippetType = "autosnippet", condition = tex.in_math }, t("\\rightarrow")), + s({ trig = "lr", snippetType = "autosnippet", condition = tex.in_math }, t("\\leftarrow")), - s({ trig = "lr", snippetType = "autosnippet", condition = tex.in_math }, t("\\leftarrow")), - - s({ trig = "ex", snippetType = "autosnippet", condition = tex.in_math }, t("\\exists")), + s({ trig = "ex", snippetType = "autosnippet", condition = tex.in_math }, t("\\exists")), - s({ trig = "fa", snippetType = "autosnippet", condition = tex.in_math }, t("\\forall")), + s({ trig = "fa", snippetType = "autosnippet", condition = tex.in_math }, t("\\forall")), - s({ trig = "bu", snippetType = "autosnippet", condition = tex.in_math }, t("\\bigcup")), + s({ trig = "bu", snippetType = "autosnippet", condition = tex.in_math }, t("\\bigcup")), - s({ trig = "ba", snippetType = "autosnippet" , condition = tex.in_math}, t("\\bigcap")), + s({ trig = "ba", snippetType = "autosnippet", condition = tex.in_math }, t("\\bigcap")), - s({ trig = ">=", snippetType = "autosnippet" , condition = tex.in_math}, t("\\geq")), + s({ trig = ">=", snippetType = "autosnippet", condition = tex.in_math }, t("\\geq")), - s({ trig = "<=", snippetType = "autosnippet", condition = tex.in_math}, t("\\leq")), + s({ trig = "<=", snippetType = "autosnippet", condition = tex.in_math }, t("\\leq")), }