diff options
| author | Hsieh Chin Fan <pham@topo.tw> | 2024-07-02 18:10:23 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <pham@topo.tw> | 2024-07-02 18:10:23 +0800 |
| commit | 0bed649a238b300f7b960d52d161cbb0adc717af (patch) | |
| tree | d62cca138f00ce42784516797a6a666ef9a2a7a6 /vim | |
| parent | 1aa36200150cd8744c9c8c3bede9110cbf382c90 (diff) | |
Update
Diffstat (limited to 'vim')
| -rw-r--r-- | vim/init/keymaps.vim | 21 | ||||
| -rw-r--r-- | vim/lua/configs/telescope.lua | 2 | ||||
| -rw-r--r-- | vim/lua/mappings.lua | 52 | ||||
| -rw-r--r-- | vim/lua/plugins/init.lua | 17 |
4 files changed, 51 insertions, 41 deletions
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index d0e2cd0..e4bdfd4 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim | |||
| @@ -47,6 +47,9 @@ nnoremap <C-p> "0p | |||
| 47 | nmap <leader>w :w!<CR> | 47 | nmap <leader>w :w!<CR> |
| 48 | 48 | ||
| 49 | " Fast quit with error | 49 | " Fast quit with error |
| 50 | nmap <leader>q :q<CR> | ||
| 51 | |||
| 52 | " Fast quit with error | ||
| 50 | nmap cq :cq<CR> | 53 | nmap cq :cq<CR> |
| 51 | 54 | ||
| 52 | " Switch wrap | 55 | " Switch wrap |
| @@ -74,7 +77,6 @@ augroup END | |||
| 74 | " Open terminal | 77 | " Open terminal |
| 75 | " nnoremap <leader>, :terminal ++noclose<CR> | 78 | " nnoremap <leader>, :terminal ++noclose<CR> |
| 76 | vnoremap <leader>, :terminal<CR> | 79 | vnoremap <leader>, :terminal<CR> |
| 77 | echo foo | ||
| 78 | 80 | ||
| 79 | " Toggle paste mode on and off | 81 | " Toggle paste mode on and off |
| 80 | map <leader>pp :setlocal paste!<CR> | 82 | map <leader>pp :setlocal paste!<CR> |
| @@ -312,20 +314,17 @@ nnoremap <leader>rr :Redir | |||
| 312 | "---------------------------------------------------------------------- | 314 | "---------------------------------------------------------------------- |
| 313 | " QUICK_SUBSTITUTE | 315 | " QUICK_SUBSTITUTE |
| 314 | "---------------------------------------------------------------------- | 316 | "---------------------------------------------------------------------- |
| 315 | function! IsSubstituteTextSelected() | 317 | let g:text_selected = 1 |
| 316 | execute "norm \<ESC>" | ||
| 317 | " Get position of the first/last char | ||
| 318 | echo col("'<") col("'>") len(getline('.'))+1 | ||
| 319 | return col("'<") != 1 || col("'>") != len(getline('.')) + 1 | ||
| 320 | endfunction | ||
| 321 | function! SelectAreaOrDoSubstitute() | 318 | function! SelectAreaOrDoSubstitute() |
| 322 | if IsSubstituteTextSelected() | 319 | if g:text_selected |
| 323 | call feedkeys('gv"aygv*NVL') | 320 | call feedkeys("\"sygv/\<C-R>s\<CR>gn") |
| 321 | let g:text_selected = 0 | ||
| 324 | else | 322 | else |
| 325 | call feedkeys("gv:s//\<C-R>a/g\<Left>\<Left>") | 323 | call feedkeys(":s//\<C-R>//g\<Left>\<Left>") |
| 324 | let g:text_selected = 1 | ||
| 326 | endif | 325 | endif |
| 327 | endfunction | 326 | endfunction |
| 328 | vnoremap <CR> <Cmd>call SelectAreaOrDoSubstitute()<CR> | 327 | vnoremap <TAB> <Cmd>call SelectAreaOrDoSubstitute()<CR> |
| 329 | 328 | ||
| 330 | 329 | ||
| 331 | "---------------------------------------------------------------------- | 330 | "---------------------------------------------------------------------- |
diff --git a/vim/lua/configs/telescope.lua b/vim/lua/configs/telescope.lua index 70eddf4..6efa391 100644 --- a/vim/lua/configs/telescope.lua +++ b/vim/lua/configs/telescope.lua | |||
| @@ -4,7 +4,7 @@ return { | |||
| 4 | i = { | 4 | i = { |
| 5 | -- ["<c-j>"] = "move_selection_next", | 5 | -- ["<c-j>"] = "move_selection_next", |
| 6 | -- ["<c-k>"] = "move_selection_previous", | 6 | -- ["<c-k>"] = "move_selection_previous", |
| 7 | ["<C-w>"] = require("telescope.actions.layout").toggle_preview, | 7 | ["<C-e>"] = require("telescope.actions.layout").toggle_preview, |
| 8 | ["<C-u>"] = false, | 8 | ["<C-u>"] = false, |
| 9 | ["<C-o>"] = function(p_bufnr) | 9 | ["<C-o>"] = function(p_bufnr) |
| 10 | require("telescope.actions").send_selected_to_qflist(p_bufnr) | 10 | require("telescope.actions").send_selected_to_qflist(p_bufnr) |
diff --git a/vim/lua/mappings.lua b/vim/lua/mappings.lua index d3cfda0..788a6ab 100644 --- a/vim/lua/mappings.lua +++ b/vim/lua/mappings.lua | |||
| @@ -46,24 +46,44 @@ vim.keymap.set('n', '<leader>ss', function() | |||
| 46 | local current_filetype = vim.bo.filetype | 46 | local current_filetype = vim.bo.filetype |
| 47 | local cwd = os.getenv("HOME") .. '/snippets' | 47 | local cwd = os.getenv("HOME") .. '/snippets' |
| 48 | require('telescope.builtin').find_files { | 48 | require('telescope.builtin').find_files { |
| 49 | prompt_title = 'Select a snippet for ' .. current_filetype, | 49 | prompt_title = 'Press <C-T> to edit a snippet', |
| 50 | default_text = current_filetype .. "_", | 50 | default_text = current_filetype .. "_", |
| 51 | cwd = cwd, | 51 | cwd = cwd, |
| 52 | attach_mappings = function(prompt_bufnr, map) | 52 | attach_mappings = function(prompt_bufnr, map) |
| 53 | local insert_selected_snippet = function() | 53 | local get_prompt_or_entry = function() |
| 54 | local file = require('telescope.actions.state').get_selected_entry()[1] | 54 | local file_list = require('telescope.actions.state').get_selected_entry() |
| 55 | local snippet_content = vim.fn.readfile(cwd .. "/" .. file) | 55 | if file_list then |
| 56 | require('telescope.actions').close(prompt_bufnr) | 56 | return file_list[1] |
| 57 | vim.api.nvim_put(snippet_content, '', false, true) | 57 | else |
| 58 | local current_picker = require('telescope.actions.state').get_current_picker(prompt_bufnr) | ||
| 59 | return current_picker:_get_prompt() | ||
| 60 | end | ||
| 58 | end | 61 | end |
| 59 | local edit_selected_snippet = function() | 62 | |
| 60 | local file = require('telescope.actions.state').get_selected_entry()[1] | 63 | local edit_snippet = function() |
| 64 | local file = get_prompt_or_entry() | ||
| 61 | require('telescope.actions').close(prompt_bufnr) | 65 | require('telescope.actions').close(prompt_bufnr) |
| 66 | local prefix_filetype = string.match(file, "([^_]+)") | ||
| 62 | vim.cmd(":e " .. cwd .. "/" .. file) | 67 | vim.cmd(":e " .. cwd .. "/" .. file) |
| 68 | vim.bo.filetype(prefix_filetype) | ||
| 69 | vim.cmd("set filetype?") | ||
| 70 | end | ||
| 71 | |||
| 72 | local insert_selected_snippet = function() | ||
| 73 | local file = get_prompt_or_entry() | ||
| 74 | local path = cwd .. "/" .. file | ||
| 75 | if vim.fn.filereadable(path) ~= 0 then | ||
| 76 | local snippet_content = vim.fn.readfile(path) | ||
| 77 | require('telescope.actions').close(prompt_bufnr) | ||
| 78 | vim.fn.setreg('"', snippet_content) | ||
| 79 | print('Snippet saved to register') | ||
| 80 | else | ||
| 81 | edit_snippet() | ||
| 82 | end | ||
| 63 | end | 83 | end |
| 64 | 84 | ||
| 65 | map('i', '<CR>', insert_selected_snippet) | 85 | map('i', '<CR>', insert_selected_snippet) |
| 66 | map('i', '<C-T>', edit_selected_snippet) | 86 | map('i', '<C-T>', edit_snippet) |
| 67 | map('n', '<CR>', insert_selected_snippet) | 87 | map('n', '<CR>', insert_selected_snippet) |
| 68 | 88 | ||
| 69 | return true | 89 | return true |
| @@ -91,16 +111,6 @@ vim.keymap.set('n', '<leader>sd', function() | |||
| 91 | } | 111 | } |
| 92 | end, { desc = 'Search Directory' }) | 112 | end, { desc = 'Search Directory' }) |
| 93 | 113 | ||
| 94 | vim.keymap.set('n', '<leader>sn', function() | ||
| 95 | local current_filetype = vim.bo.filetype | ||
| 96 | vim.ui.input({ prompt = 'Snippet Name: ', default = current_filetype .. "_" }, function(snippet) | ||
| 97 | vim.cmd("cd ~/snippets") | ||
| 98 | vim.cmd("e " .. snippet) | ||
| 99 | vim.cmd("set filetype=" .. current_filetype) | ||
| 100 | vim.cmd("set filetype?") | ||
| 101 | end) | ||
| 102 | end, { desc = "Create a new snippet" }) | ||
| 103 | |||
| 104 | 114 | ||
| 105 | -- map("n", "<leader>ma", "<cmd>Telescope marks<CR>", { desc = "telescope find marks" }) | 115 | -- map("n", "<leader>ma", "<cmd>Telescope marks<CR>", { desc = "telescope find marks" }) |
| 106 | -- map("n", "<leader>cm", "<cmd>Telescope git_commits<CR>", { desc = "telescope git commits" }) | 116 | -- map("n", "<leader>cm", "<cmd>Telescope git_commits<CR>", { desc = "telescope git commits" }) |
| @@ -172,5 +182,5 @@ vim.cmd('vmap s S') | |||
| 172 | -- [ Aerial ] | 182 | -- [ Aerial ] |
| 173 | vim.keymap.set("n", "{", "<cmd>AerialPrev<CR>", {}) | 183 | vim.keymap.set("n", "{", "<cmd>AerialPrev<CR>", {}) |
| 174 | vim.keymap.set("n", "}", "<cmd>AerialNext<CR>", {}) | 184 | vim.keymap.set("n", "}", "<cmd>AerialNext<CR>", {}) |
| 175 | vim.keymap.set("n", "gN", "<cmd>Telescope aerial<CR>") | 185 | vim.keymap.set("n", "<C-W>a", "<cmd>Telescope aerial<CR>") |
| 176 | vim.keymap.set("n", "gn", function() require("aerial").toggle({ direction = "left" }) end) | 186 | vim.keymap.set("n", "<C-W><C-A>", function() require("aerial").toggle({ direction = "left" }) end) |
diff --git a/vim/lua/plugins/init.lua b/vim/lua/plugins/init.lua index c74e8d4..0e9911e 100644 --- a/vim/lua/plugins/init.lua +++ b/vim/lua/plugins/init.lua | |||
| @@ -61,14 +61,15 @@ return { | |||
| 61 | changedelete = { text = '~' }, | 61 | changedelete = { text = '~' }, |
| 62 | }, | 62 | }, |
| 63 | on_attach = function(bufnr) | 63 | on_attach = function(bufnr) |
| 64 | vim.keymap.set('n', '<leader>gp', require('gitsigns').prev_hunk, | 64 | local gs = require('gitsigns') |
| 65 | { buffer = bufnr, desc = '[G]o to [P]revious Hunk' }) | 65 | vim.keymap.set('n', '<leader>gp', gs.prev_hunk, { buffer = bufnr, desc = '[G]o to [P]revious Hunk' }) |
| 66 | vim.keymap.set('n', '<leader>gn', require('gitsigns').next_hunk, { buffer = bufnr, desc = '[G]o to [N]ext Hunk' }) | 66 | vim.keymap.set('n', '<leader>gn', gs.next_hunk, { buffer = bufnr, desc = '[G]o to [N]ext Hunk' }) |
| 67 | vim.keymap.set('n', '<leader>ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' }) | 67 | vim.keymap.set('n', '<leader>hp', gs.preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' }) |
| 68 | vim.keymap.set('n', '<leader>hd', require('gitsigns').diffthis, { buffer = bufnr, desc = '[h]unk [d]iff' }) | 68 | vim.keymap.set('n', '<leader>hd', gs.diffthis, { buffer = bufnr, desc = '[h]unk [d]iff' }) |
| 69 | vim.keymap.set('n', '<leader>hD', function() require('gitsigns').diffthis('~') end, | 69 | vim.keymap.set('n', '<leader>hD', function() gs.diffthis('~') end, { buffer = bufnr, desc = '[h]unk [d]iff for ~' }) |
| 70 | { buffer = bufnr, desc = '[h]unk [d]iff for ~' }) | 70 | -- vim.keymap.set("n", "<leader>gb", gs.blame_line{full=true}, { desc = "Git Blame" }) |
| 71 | vim.keymap.set('v', 'hr', ":Gitsigns reset_hunk<CR>", { buffer = bufnr, desc = '[h]unk [r]eset' }) | 71 | vim.keymap.set("n", "<leader>gb", gs.toggle_current_line_blame, { desc = "Blame Line" }) |
| 72 | vim.keymap.set('v', 'hr', gs.reset_hunk, { buffer = bufnr, desc = '[h]unk [r]eset' }) | ||
| 72 | end, | 73 | end, |
| 73 | }, | 74 | }, |
| 74 | }, | 75 | }, |