-- 編輯器系統設定 vim.api.nvim_set_option("clipboard", "unnamedplus") -- 使用系統剪貼簿(Wayland有直接支援,不須依賴vim-wayland-clipboard) vim.opt.confirm = true -- 操作過程有衝突時,以明確的文字來詢問 -- 編碼設定 vim.opt.encoding = "utf-8" vim.opt.fileencodings = { "utf-8", "cp950" } vim.opt.enc = "utf-8" -- 設定編輯選項 vim.opt.number = true -- 顯示行號 vim.opt.relativenumber = false -- 相對行號 vim.opt.tabstop = 4 -- tab鍵寬度 vim.opt.shiftwidth = 4 -- 自動縮排寬度 vim.opt.expandtab = true -- 使用空格代替tab vim.opt.termguicolors = true -- 支持真彩色 vim.opt.colorcolumn = "80,120" -- 顯示編輯器建議寬度 vim.opt.scrolloff = 3 -- 捲動時保留 n 行彈性 vim.opt.history = 10000 -- 設定命令歷史記錄數量為 10000 -- 整行移動的快速鍵 vim.api.nvim_set_keymap('n', '', ':m .+1==', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '', ':m .-2==', { noremap = true, silent = true }) vim.api.nvim_set_keymap('i', '', ':m .+1==gi', { noremap = true, silent = true }) vim.api.nvim_set_keymap('i', '', ':m .-2==gi', { noremap = true, silent = true }) vim.api.nvim_set_keymap('v', '', ":m '>+1gv=gv", { noremap = true, silent = true }) vim.api.nvim_set_keymap('v', '', ":m '<-2gv=gv", { noremap = true, silent = true }) -- 使用 Alt+方向鍵 移動整行 vim.api.nvim_set_keymap('n', '', ':m .+1==', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '', ':m .-2==', { noremap = true, silent = true }) vim.api.nvim_set_keymap('i', '', ':m .+1==gi', { noremap = true, silent = true }) vim.api.nvim_set_keymap('i', '', ':m .-2==gi', { noremap = true, silent = true }) vim.api.nvim_set_keymap('v', '', ":m '>+1gv=gv", { noremap = true, silent = true }) vim.api.nvim_set_keymap('v', '', ":m '<-2gv=gv", { noremap = true, silent = true }) -- Ctrl+Alt+Shift+j/k 複製整行並向下/向上貼上 vim.api.nvim_set_keymap('n', '', 'yyp', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '', 'yyP', { noremap = true, silent = true }) -- Ctrl+Alt+Shift+方向鍵 複製整行並向下/向上貼上 vim.api.nvim_set_keymap('n', '', 'yyp', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '', 'yyP', { noremap = true, silent = true }) -- Insert Mode 下的 Ctrl+Alt+Shift+方向鍵 複製整行並向下/向上貼上 vim.api.nvim_set_keymap('i', '', 'yypgi', { noremap = true, silent = true }) vim.api.nvim_set_keymap('i', '', 'yyPgi', { noremap = true, silent = true }) -- -- 處理不同終端的行為 -- -- 在 Insert Mode 下的 Ctrl+Enter 在下一行插入新行並保持 Insert 模式 -- local term = vim.fn.getenv("TERM") -- local term_program = vim.fn.getenv("TERM_PROGRAM") -- if term_program == "iTerm.app" then -- -- iTerm 的快捷鍵設置 -- vim.api.nvim_set_keymap('i', '', 'o', { noremap = true, silent = true }) -- vim.api.nvim_set_keymap('i', '', 'O', { noremap = true, silent = true }) -- elseif term == "alacritty" then -- -- Alacritty 的快捷鍵設置 -- vim.api.nvim_set_keymap('i', '', 'o', { noremap = true, silent = true }) -- vim.api.nvim_set_keymap('i', '', 'O', { noremap = true, silent = true }) -- elseif term == "xterm-256color" then -- -- xterm-256color 的快捷鍵設置 -- vim.api.nvim_set_keymap('i', '', 'o', { noremap = true, silent = true }) -- vim.api.nvim_set_keymap('i', '', 'O', { noremap = true, silent = true }) -- end -- 使用Ctrl(Alt)+Enter 在下一行插入新行並保持 Insert 模式 -- 檢查 $TERM 或 $TERM_PROGRAM 的值 -- Alacritty, GUI(Neovide, Goneovim) 皆可 -- xterm-256color採用程式: Konsole, iTerm2, gnome-terminal 會有按鍵吃不到的問題,詳下述註解: -- 使用Ctrl+Enter 在下一行插入新行並保持 Insert 模式(xterm-256color 吃不到) vim.api.nvim_set_keymap('i', '', 'o', { noremap = true, silent = true }) vim.api.nvim_set_keymap('i', '', 'O', { noremap = true, silent = true }) -- 使用Alt+Enter 在下一行插入新行並保持 Insert 模式 vim.api.nvim_set_keymap('i', '', 'o', { noremap = true, silent = true }) vim.api.nvim_set_keymap('i', '', 'O', { noremap = true, silent = true }) -- xterm-256color 吃不到shift -- 處理剪貼簿習慣對應(在Insert模式可使用慣用的快速鍵) vim.opt.keymodel = "startsel" -- 啟用 Shift + 方向鍵選取功能 vim.api.nvim_set_keymap('i', '', '"+pa', { noremap = true, silent = true }) -- Insert Mode 下的 Ctrl+V 貼上 vim.api.nvim_set_keymap('v', '', '"+y', { noremap = true, silent = true }) -- Visual Mode 下的 Ctrl+C 複製 vim.api.nvim_set_keymap('v', '', '"+d', { noremap = true, silent = true }) -- Visual Mode 下的 Ctrl+X 剪下 vim.api.nvim_set_keymap('v', '', '"+p', { noremap = true, silent = true }) -- Visual Mode 下的 Ctrl+V 貼上 -- 啟用 Tab 縮排 vim.api.nvim_set_keymap('n', '', 'v>', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '', 'v<', { noremap = true, silent = true }) vim.api.nvim_set_keymap('v', '', '>gv', { noremap = true, silent = true }) vim.api.nvim_set_keymap('v', '', '', '', { noremap = true, silent = true }) -- Insert Mode 下的 Shift+Tab 退縮排 -- 透過 v 選取整行縮排後,不取消選取整行 vim.api.nvim_set_keymap('v', '<', '', '>gv', { noremap = true, silent = true })