first commit

This commit is contained in:
captain 2024-10-07 15:29:32 +08:00
commit 6955e90e07
61 changed files with 3641 additions and 0 deletions

419
lua/core/cursor.lua Normal file
View file

@ -0,0 +1,419 @@
-- ===
-- === 光标移动neovide
-- ===
if vim.g.neovide then
-- Put anything you want to happen only in Neovide here
vim.o.guifont = "Source Code Pro:h16" -- text below applies for VimScript
vim.g.neovide_transparency = 0.75
-- 全屏在i3和sway的配置中设置了并且速度更快
vim.g.neovide_fullscreen = true
end
-- ===
-- === map function
-- ===
local function mapkey(mode, lhs, rhs)
vim.api.nvim_set_keymap(mode, lhs, rhs, {noremap=true})
end
-- interestind stess
mapkey('','[a<LEADER>','1k')
mapkey('','[r<LEADER>','2k')
mapkey('','[s<LEADER>','3k')
mapkey('','[t<LEADER>','4k')
mapkey('','[d<LEADER>','5k')
mapkey('','[h<LEADER>','6k')
mapkey('','[n<LEADER>','7k')
mapkey('','[e<LEADER>','8k')
mapkey('','[i<LEADER>','9k')
mapkey('','[ao<LEADER>','10k')
mapkey('','[aa<LEADER>','11k')
mapkey('','[ar<LEADER>','12k')
mapkey('','[as<LEADER>','13k')
mapkey('','[at<LEADER>','14k')
mapkey('','[ad<LEADER>','15k')
mapkey('','[ah<LEADER>','16k')
mapkey('','[an<LEADER>','17k')
mapkey('','[ae<LEADER>','18k')
mapkey('','[ai<LEADER>','19k')
mapkey('','[ro<LEADER>','20k')
mapkey('','[ra<LEADER>','21k')
mapkey('','[rr<LEADER>','22k')
mapkey('','[rs<LEADER>','23k')
mapkey('','[rt<LEADER>','24k')
mapkey('','[rd<LEADER>','25k')
mapkey('','[rh<LEADER>','26k')
mapkey('','[rn<LEADER>','27k')
mapkey('','[re<LEADER>','28k')
mapkey('','[ri<LEADER>','29k')
mapkey('','[so<LEADER>','30k')
mapkey('','[sa<LEADER>','31k')
mapkey('','[sr<LEADER>','32k')
mapkey('','[ss<LEADER>','33k')
mapkey('','[st<LEADER>','34k')
mapkey('','[sd<LEADER>','35k')
mapkey('','[sh<LEADER>','36k')
mapkey('','[sn<LEADER>','37k')
mapkey('','[se<LEADER>','38k')
mapkey('','[si<LEADER>','39k')
mapkey('','[to<LEADER>','40k')
mapkey('','[ta<LEADER>','41k')
mapkey('','[tr<LEADER>','42k')
mapkey('','[ts<LEADER>','43k')
mapkey('','[tt<LEADER>','44k')
mapkey('','[td<LEADER>','45k')
mapkey('','[th<LEADER>','46k')
mapkey('','[tn<LEADER>','47k')
mapkey('','[te<LEADER>','48k')
mapkey('','[ti<LEADER>','49k')
mapkey('','[do<LEADER>','50k')
mapkey('','[da<LEADER>','51k')
mapkey('','[dr<LEADER>','52k')
mapkey('','[ds<LEADER>','53k')
mapkey('','[dt<LEADER>','54k')
mapkey('','[dd<LEADER>','55k')
mapkey('','[dh<LEADER>','56k')
mapkey('','[dn<LEADER>','57k')
mapkey('','[de<LEADER>','58k')
mapkey('','[di<LEADER>','59k')
mapkey('','[ho<LEADER>','60k')
mapkey('','[ha<LEADER>','61k')
mapkey('','[hr<LEADER>','62k')
mapkey('','[hs<LEADER>','63k')
mapkey('','[ht<LEADER>','64k')
mapkey('','[hd<LEADER>','65k')
mapkey('','[hh<LEADER>','66k')
mapkey('','[hn<LEADER>','67k')
mapkey('','[he<LEADER>','68k')
mapkey('','[hi<LEADER>','69k')
mapkey('','[no<LEADER>','70k')
mapkey('','[na<LEADER>','71k')
mapkey('','[nr<LEADER>','72k')
mapkey('','[ns<LEADER>','73k')
mapkey('','[nt<LEADER>','74k')
mapkey('','[nd<LEADER>','75k')
mapkey('','[nh<LEADER>','76k')
mapkey('','[nn<LEADER>','77k')
mapkey('','[ne<LEADER>','78k')
mapkey('','[ni<LEADER>','79k')
mapkey('','[eo<LEADER>','80k')
mapkey('','[ea<LEADER>','81k')
mapkey('','[er<LEADER>','82k')
mapkey('','[es<LEADER>','83k')
mapkey('','[et<LEADER>','84k')
mapkey('','[ed<LEADER>','85k')
mapkey('','[eh<LEADER>','86k')
mapkey('','[en<LEADER>','87k')
mapkey('','[ee<LEADER>','88k')
mapkey('','[ei<LEADER>','89k')
mapkey('','[io<LEADER>','90k')
mapkey('','[ia<LEADER>','91k')
mapkey('','[ir<LEADER>','92k')
mapkey('','[is<LEADER>','93k')
mapkey('','[it<LEADER>','94k')
mapkey('','[id<LEADER>','95k')
mapkey('','[ih<LEADER>','96k')
mapkey('','[in<LEADER>','97k')
mapkey('','[ie<LEADER>','98k')
mapkey('','[ii<LEADER>','99k')
mapkey('','[aoo<LEADER>','100k')
mapkey('','[aoa<LEADER>','101k')
mapkey('','[aor<LEADER>','102k')
mapkey('','[aos<LEADER>','103k')
mapkey('','[aot<LEADER>','104k')
mapkey('','[aod<LEADER>','105k')
mapkey('','[aoh<LEADER>','106k')
mapkey('','[aon<LEADER>','107k')
mapkey('','[aoe<LEADER>','108k')
mapkey('','[aoi<LEADER>','109k')
mapkey('','[aao<LEADER>','110k')
mapkey('','[aaa<LEADER>','111k')
mapkey('','[aar<LEADER>','112k')
mapkey('','[aas<LEADER>','113k')
mapkey('','[aat<LEADER>','114k')
mapkey('','[aad<LEADER>','115k')
mapkey('','[aah<LEADER>','116k')
mapkey('','[aan<LEADER>','117k')
mapkey('','[aae<LEADER>','118k')
mapkey('','[aai<LEADER>','119k')
mapkey('','[aro<LEADER>','120k')
mapkey('','[ara<LEADER>','121k')
mapkey('','[arr<LEADER>','122k')
mapkey('','[ars<LEADER>','123k')
mapkey('','[art<LEADER>','124k')
mapkey('','[ard<LEADER>','125k')
mapkey('','[arh<LEADER>','126k')
mapkey('','[arn<LEADER>','127k')
mapkey('','[are<LEADER>','128k')
mapkey('','[ari<LEADER>','129k')
mapkey('','[aso<LEADER>','130k')
mapkey('','[asa<LEADER>','131k')
mapkey('','[asr<LEADER>','132k')
mapkey('','[ass<LEADER>','133k')
mapkey('','[ast<LEADER>','134k')
mapkey('','[asd<LEADER>','135k')
mapkey('','[ash<LEADER>','136k')
mapkey('','[asn<LEADER>','137k')
mapkey('','[ase<LEADER>','138k')
mapkey('','[asi<LEADER>','139k')
mapkey('','[ato<LEADER>','140k')
mapkey('','[ata<LEADER>','141k')
mapkey('','[atr<LEADER>','142k')
mapkey('','[ats<LEADER>','143k')
mapkey('','[att<LEADER>','144k')
mapkey('','[atd<LEADER>','145k')
mapkey('','[ath<LEADER>','146k')
mapkey('','[atn<LEADER>','147k')
mapkey('','[ate<LEADER>','148k')
mapkey('','[ati<LEADER>','149k')
mapkey('','[ado<LEADER>','150k')
mapkey('','[ada<LEADER>','151k')
mapkey('','[adr<LEADER>','152k')
mapkey('','[ads<LEADER>','153k')
mapkey('','[adt<LEADER>','154k')
mapkey('','[add<LEADER>','155k')
mapkey('','[adh<LEADER>','156k')
mapkey('','[adn<LEADER>','157k')
mapkey('','[ade<LEADER>','158k')
mapkey('','[adi<LEADER>','159k')
mapkey('','[aho<LEADER>','160k')
mapkey('','[aha<LEADER>','161k')
mapkey('','[ahr<LEADER>','162k')
mapkey('','[ahs<LEADER>','163k')
mapkey('','[aht<LEADER>','164k')
mapkey('','[ahd<LEADER>','165k')
mapkey('','[ahh<LEADER>','166k')
mapkey('','[ahn<LEADER>','167k')
mapkey('','[ahe<LEADER>','168k')
mapkey('','[ahi<LEADER>','169k')
mapkey('','[ano<LEADER>','170k')
mapkey('','[ana<LEADER>','171k')
mapkey('','[anr<LEADER>','172k')
mapkey('','[ans<LEADER>','173k')
mapkey('','[ant<LEADER>','174k')
mapkey('','[and<LEADER>','175k')
mapkey('','[anh<LEADER>','176k')
mapkey('','[ann<LEADER>','177k')
mapkey('','[ane<LEADER>','178k')
mapkey('','[ani<LEADER>','179k')
mapkey('','[aeo<LEADER>','180k')
mapkey('','[aea<LEADER>','181k')
mapkey('','[aer<LEADER>','182k')
mapkey('','[aes<LEADER>','183k')
mapkey('','[aet<LEADER>','184k')
mapkey('','[aed<LEADER>','185k')
mapkey('','[aeh<LEADER>','186k')
mapkey('','[aen<LEADER>','187k')
mapkey('','[aee<LEADER>','188k')
mapkey('','[aei<LEADER>','189k')
mapkey('','[aio<LEADER>','190k')
mapkey('','[aia<LEADER>','191k')
mapkey('','[air<LEADER>','192k')
mapkey('','[ais<LEADER>','193k')
mapkey('','[ait<LEADER>','194k')
mapkey('','[aid<LEADER>','195k')
mapkey('','[aih<LEADER>','196k')
mapkey('','[ain<LEADER>','197k')
mapkey('','[aie<LEADER>','198k')
mapkey('','[aii<LEADER>','199k')
mapkey("","'a<LEADER>","1j")
mapkey("","'r<LEADER>","2j")
mapkey("","'s<LEADER>","3j")
mapkey("","'t<LEADER>","4j")
mapkey("","'d<LEADER>","5j")
mapkey("","'h<LEADER>","6j")
mapkey("","'n<LEADER>","7j")
mapkey("","'e<LEADER>","8j")
mapkey("","'i<LEADER>","9j")
mapkey("","'ao<LEADER>","10j")
mapkey("","'aa<LEADER>","11j")
mapkey("","'ar<LEADER>","12j")
mapkey("","'as<LEADER>","13j")
mapkey("","'at<LEADER>","14j")
mapkey("","'ad<LEADER>","15j")
mapkey("","'ah<LEADER>","16j")
mapkey("","'an<LEADER>","17j")
mapkey("","'ae<LEADER>","18j")
mapkey("","'ai<LEADER>","19j")
mapkey("","'ro<LEADER>","20j")
mapkey("","'ra<LEADER>","21j")
mapkey("","'rr<LEADER>","22j")
mapkey("","'rs<LEADER>","23j")
mapkey("","'rt<LEADER>","24j")
mapkey("","'rd<LEADER>","25j")
mapkey("","'rh<LEADER>","26j")
mapkey("","'rn<LEADER>","27j")
mapkey("","'re<LEADER>","28j")
mapkey("","'ri<LEADER>","29j")
mapkey("","'so<LEADER>","30j")
mapkey("","'sa<LEADER>","31j")
mapkey("","'sr<LEADER>","32j")
mapkey("","'ss<LEADER>","33j")
mapkey("","'st<LEADER>","34j")
mapkey("","'sd<LEADER>","35j")
mapkey("","'sh<LEADER>","36j")
mapkey("","'sn<LEADER>","37j")
mapkey("","'se<LEADER>","38j")
mapkey("","'si<LEADER>","39j")
mapkey("","'to<LEADER>","40j")
mapkey("","'ta<LEADER>","41j")
mapkey("","'tr<LEADER>","42j")
mapkey("","'ts<LEADER>","43j")
mapkey("","'tt<LEADER>","44j")
mapkey("","'td<LEADER>","45j")
mapkey("","'th<LEADER>","46j")
mapkey("","'tn<LEADER>","47j")
mapkey("","'te<LEADER>","48j")
mapkey("","'ti<LEADER>","49j")
mapkey("","'do<LEADER>","50j")
mapkey("","'da<LEADER>","51j")
mapkey("","'dr<LEADER>","52j")
mapkey("","'ds<LEADER>","53j")
mapkey("","'dt<LEADER>","54j")
mapkey("","'dd<LEADER>","55j")
mapkey("","'dh<LEADER>","56j")
mapkey("","'dn<LEADER>","57j")
mapkey("","'de<LEADER>","58j")
mapkey("","'di<LEADER>","59j")
mapkey("","'ho<LEADER>","60j")
mapkey("","'ha<LEADER>","61j")
mapkey("","'hr<LEADER>","62j")
mapkey("","'hs<LEADER>","63j")
mapkey("","'ht<LEADER>","64j")
mapkey("","'hd<LEADER>","65j")
mapkey("","'hh<LEADER>","66j")
mapkey("","'hn<LEADER>","67j")
mapkey("","'he<LEADER>","68j")
mapkey("","'hi<LEADER>","69j")
mapkey("","'no<LEADER>","70j")
mapkey("","'na<LEADER>","71j")
mapkey("","'nr<LEADER>","72j")
mapkey("","'ns<LEADER>","73j")
mapkey("","'nt<LEADER>","74j")
mapkey("","'nd<LEADER>","75j")
mapkey("","'nh<LEADER>","76j")
mapkey("","'nn<LEADER>","77j")
mapkey("","'ne<LEADER>","78j")
mapkey("","'ni<LEADER>","79j")
mapkey("","'eo<LEADER>","80j")
mapkey("","'ea<LEADER>","81j")
mapkey("","'er<LEADER>","82j")
mapkey("","'es<LEADER>","83j")
mapkey("","'et<LEADER>","84j")
mapkey("","'ed<LEADER>","85j")
mapkey("","'eh<LEADER>","86j")
mapkey("","'en<LEADER>","87j")
mapkey("","'ee<LEADER>","88j")
mapkey("","'ei<LEADER>","89j")
mapkey("","'io<LEADER>","90j")
mapkey("","'ia<LEADER>","91j")
mapkey("","'ir<LEADER>","92j")
mapkey("","'is<LEADER>","93j")
mapkey("","'it<LEADER>","94j")
mapkey("","'id<LEADER>","95j")
mapkey("","'ih<LEADER>","96j")
mapkey("","'in<LEADER>","97j")
mapkey("","'ie<LEADER>","98j")
mapkey("","'ii<LEADER>","99j")
mapkey("","'aoo<LEADER>","100j")
mapkey("","'aoa<LEADER>","101j")
mapkey("","'aor<LEADER>","102j")
mapkey("","'aos<LEADER>","103j")
mapkey("","'aot<LEADER>","104j")
mapkey("","'aod<LEADER>","105j")
mapkey("","'aoh<LEADER>","106j")
mapkey("","'aon<LEADER>","107j")
mapkey("","'aoe<LEADER>","108j")
mapkey("","'aoi<LEADER>","109j")
mapkey("","'aao<LEADER>","110j")
mapkey("","'aaa<LEADER>","111j")
mapkey("","'aar<LEADER>","112j")
mapkey("","'aas<LEADER>","113j")
mapkey("","'aat<LEADER>","114j")
mapkey("","'aad<LEADER>","115j")
mapkey("","'aah<LEADER>","116j")
mapkey("","'aan<LEADER>","117j")
mapkey("","'aae<LEADER>","118j")
mapkey("","'aai<LEADER>","119j")
mapkey("","'aro<LEADER>","120j")
mapkey("","'ara<LEADER>","121j")
mapkey("","'arr<LEADER>","122j")
mapkey("","'ars<LEADER>","123j")
mapkey("","'art<LEADER>","124j")
mapkey("","'ard<LEADER>","125j")
mapkey("","'arh<LEADER>","126j")
mapkey("","'arn<LEADER>","127j")
mapkey("","'are<LEADER>","128j")
mapkey("","'ari<LEADER>","129j")
mapkey("","'aso<LEADER>","130j")
mapkey("","'asa<LEADER>","131j")
mapkey("","'asr<LEADER>","132j")
mapkey("","'ass<LEADER>","133j")
mapkey("","'ast<LEADER>","134j")
mapkey("","'asd<LEADER>","135j")
mapkey("","'ash<LEADER>","136j")
mapkey("","'asn<LEADER>","137j")
mapkey("","'ase<LEADER>","138j")
mapkey("","'asi<LEADER>","139j")
mapkey("","'ato<LEADER>","140j")
mapkey("","'ata<LEADER>","141j")
mapkey("","'atr<LEADER>","142j")
mapkey("","'ats<LEADER>","143j")
mapkey("","'att<LEADER>","144j")
mapkey("","'atd<LEADER>","145j")
mapkey("","'ath<LEADER>","146j")
mapkey("","'atn<LEADER>","147j")
mapkey("","'ate<LEADER>","148j")
mapkey("","'ati<LEADER>","149j")
mapkey("","'ado<LEADER>","150j")
mapkey("","'ada<LEADER>","151j")
mapkey("","'adr<LEADER>","152j")
mapkey("","'ads<LEADER>","153j")
mapkey("","'adt<LEADER>","154j")
mapkey("","'add<LEADER>","155j")
mapkey("","'adh<LEADER>","156j")
mapkey("","'adn<LEADER>","157j")
mapkey("","'ade<LEADER>","158j")
mapkey("","'adi<LEADER>","159j")
mapkey("","'aho<LEADER>","160j")
mapkey("","'aha<LEADER>","161j")
mapkey("","'ahr<LEADER>","162j")
mapkey("","'ahs<LEADER>","163j")
mapkey("","'aht<LEADER>","164j")
mapkey("","'ahd<LEADER>","165j")
mapkey("","'ahh<LEADER>","166j")
mapkey("","'ahn<LEADER>","167j")
mapkey("","'ahe<LEADER>","168j")
mapkey("","'ahi<LEADER>","169j")
mapkey("","'ano<LEADER>","170j")
mapkey("","'ana<LEADER>","171j")
mapkey("","'anr<LEADER>","172j")
mapkey("","'ans<LEADER>","173j")
mapkey("","'ant<LEADER>","174j")
mapkey("","'and<LEADER>","175j")
mapkey("","'anh<LEADER>","176j")
mapkey("","'ann<LEADER>","177j")
mapkey("","'ane<LEADER>","178j")
mapkey("","'ani<LEADER>","179j")
mapkey("","'aeo<LEADER>","180j")
mapkey("","'aea<LEADER>","181j")
mapkey("","'aer<LEADER>","182j")
mapkey("","'aes<LEADER>","183j")
mapkey("","'aet<LEADER>","184j")
mapkey("","'aed<LEADER>","185j")
mapkey("","'aeh<LEADER>","186j")
mapkey("","'aen<LEADER>","187j")
mapkey("","'aee<LEADER>","188j")
mapkey("","'aei<LEADER>","189j")
mapkey("","'aio<LEADER>","190j")
mapkey("","'aia<LEADER>","191j")
mapkey("","'air<LEADER>","192j")
mapkey("","'ais<LEADER>","193j")
mapkey("","'ait<LEADER>","194j")
mapkey("","'aid<LEADER>","195j")
mapkey("","'aih<LEADER>","196j")
mapkey("","'ain<LEADER>","197j")
mapkey("","'aie<LEADER>","198j")
mapkey("","'aii<LEADER>","199j")

81
lua/core/init.lua Normal file
View file

@ -0,0 +1,81 @@
-- ===
-- === Editor behavior
-- ===
-- 开启左侧数字
vim.o.number = true
-- 始终隐藏字符(不依赖语法高亮),在 Markdown 文件中,粗体、斜体等标记字符可能会被隐藏
vim.opt.conceallevel = 2
-- 使用相对数
vim.o.relativenumber = true
-- 高亮当前行
vim.o.cursorline = true
-- 一行不能完全显示时自动换行
vim.o.wrap = true
-- 在最后一行显示一些内容
vim.o.showcmd = true
-- 命令模式显示补全菜单
vim.o.wildmenu = true
-- /搜索时忽略大小写
vim.o.ignorecase = true
-- /搜索时智能大小写
vim.o.smartcase = true
-- 共享系统剪切
vim.o.clipboard = 'unnamedplus'
-- 设置<tab>键
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.softtabstop = 2
-- 随文件自动更改当前路径
vim.o.autochdir = true
-- 在光标上方和下方保留的最小屏幕行数
vim.o.scrolloff = 4
-- 自动缩进
vim.o.smartindent = true
-- 100毫秒没有输入文件将会自动保存交换文件
vim.o.updatetime = 100
-- 开启鼠标
vim.o.mouse = 'a'
-- 开启颜色
vim.o.termguicolors = true
-- 设置编码格式
vim.o.fileencodings = 'utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1'
vim.o.enc = 'utf8'
-- 保存修改历史
vim.o.swapfile = true
vim.o.undofile = true
-- 保存折叠记录,在某些独立的窗口会报错
-- vim.cmd 'au BufWinLeave * silent mkview'
-- vim.cmd 'au BufWinEnter * silent loadview'
-- 打开文件时进入上次编辑的位置
vim.cmd([[au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif]])
-- fcitx5在normal模式时自动切换为英文输入法,摘自fcitx5的archwiki
vim.cmd([[
autocmd InsertLeave * :silent !fcitx5-remote -c
autocmd BufCreate * :silent !fcitx5-remote -c
autocmd BufEnter * :silent !fcitx5-remote -c
autocmd BufLeave * :silent !fcitx5-remote -c
]])
-- 意为:
-- 当 进入插入模式 时 触发shell命令 fcitx-remote -c 关闭输入法,改为英文输入
-- 当 创建Buf 时 触发shell命令 fcitx-remote -c 关闭输入法,改为英文输入
-- 当 进入Buf 时 触发shell命令 fcitx-remote -c 关闭输入法, 改为英文输入
-- 当 离开Buf 时 触发shell命令 fcitx-remote -c 关闭输入法, 改为英文输入
-- 开启高亮复制
vim.cmd([[au TextYankPost * silent! lua vim.highlight.on_yank()]])

191
lua/core/keymap.lua Normal file
View file

@ -0,0 +1,191 @@
-- ===
-- === map function
-- ===
local function mapkey(mode, lhs, rhs)
vim.api.nvim_set_keymap(mode, lhs, rhs, { noremap = true })
end
local function mapcmd(key, cmd)
vim.api.nvim_set_keymap("n", key, ":" .. cmd .. "<cr>", { noremap = true })
end
local function maplua(key, txt)
vim.api.nvim_set_keymap("n", key, ":lua " .. txt .. "<cr>", { noremap = true })
end
-- ===
-- === Basic Mappings
-- ===
-- leader键设置为空格,; as :
vim.g.mapleader = " "
mapkey("", ";", ":")
-- 上/下一个搜索结果以及取消搜索结果高亮
mapkey("", "=", "nzz")
mapkey("", "-", "Nzz")
mapcmd("<leader><cr>", "nohlsearch")
-- 保存和退出
mapkey("", "S", ":wall<cr>")
mapkey("", "Q", ":q<cr>")
-- 撤销与反撤销
mapkey("", "l", "u")
mapkey("", "L", "<c-r>")
-- 插入
mapkey("", "k", "i")
mapkey("", "K", "I")
-- 以下两个映射默认了
-- make Y to copy till the end of the line
-- mapkey('','Y','y$')
-- make D to delete till the end of the line
-- mapkey('','D','d$')
-- 折叠
mapkey("", "<leader>o", "za")
mapkey("x", "<leader>o", "zf")
-- 读取保存的折叠
-- mapkey("", "<leader>a", ":loadview<cr>")
-- 打开lazygit,已用fm-nvim插件
-- mapcmd('<c-g>',':tabe<CR>:-tabmove<CR>:term lazygit')
-- ===
-- === Cursor Movement
-- ===
-- New cursor movement (the default arrow keys are used for resizing windows)
-- ^
-- u
-- < n i >
-- e
-- v
mapkey("", "n", "h")
mapkey("", "u", "k")
mapkey("", "e", "j")
mapkey("", "i", "l")
-- faster navigation
mapkey("", "U", "5k")
mapkey("", "E", "5j")
mapkey("", "N", "0")
mapkey("", "I", "$")
-- 更快的行导航
mapkey("", "W", "5W")
mapkey("", "B", "5B")
-- ===
-- === Window management
-- ===
-- Disable the default s key
mapkey("", "s", "<nop>")
-- 使用<space> + 新方向键 在分屏之间移动
mapkey("", "<LEADER>w", "<C-w>w")
mapkey("", "<LEADER>u", "<C-w>k")
mapkey("", "<LEADER>e", "<C-w>j")
mapkey("", "<LEADER>n", "<C-w>h")
mapkey("", "<LEADER>i", "<C-w>l")
-- 使用s + 新方向键 进行分屏
mapcmd("su", "set nosplitbelow<CR>:split<CR>:set splitbelow")
mapcmd("se", "set splitbelow<CR>:split")
mapcmd("sn", "set nosplitright<CR>:vsplit<CR>:set splitright")
mapcmd("si", "set splitright<CR>:vsplit")
-- 使用方向键来调整窗口大小
mapcmd("<up>", "res +5")
mapcmd("<down>", "res -5")
mapcmd("<left>", "vertical resize-5")
mapcmd("<right>", "vertical resize+5")
-- 使分屏窗口上下分布
mapkey("", "sh", "<C-w>t<C-w>K")
-- 使分屏窗口左右分布
mapkey("", "sv", "<C-w>t<C-w>H")
-- 按 <SPACE> + q 关闭当前窗口下方的窗口
mapkey("", "<LEADER>q", "<C-w>j:q<CR>")
-- ===
-- === Tab management
-- ===
-- tu创建新标签
mapcmd("tu", "tabe")
-- 在标签之间移动,已用bufferline.nvim替代
-- mapcmd('tn','-tabnext')
-- mapcmd('ti','+tabnext')
-- 移动标签的位置
-- mapcmd('tmn','-tabmove')
-- mapcmd('tmi','+tabmove')
-- 关闭当前标签,已用close-buffers替代
-- mapcmd('tq','tabc')
-- ===
-- === 批量缩进方法
-- ===
-- 操作为esc从编辑模式退到命令模式将光标移到需要缩进的行的行首然后按shift+v可以看到该行已被选中且左下角提示为“可视”
-- 按键盘上的上下方向键,如这里按向下的箭头,选中所有需要批量缩进的行
-- 按shift+>,是向前缩进一个tab值按shift+<则是缩回一个tab值
mapkey("x", "<", "<gv")
mapkey("x", ">", ">gv")
mapkey("x", "<s-tab>", "<gv")
mapkey("x", "<tab>", ">gv")
-- ===
-- === Other useful stuff
-- ===
-- 打开一个终端窗口
mapcmd("<LEADER>/", "set splitbelow<CR>:split<CR>:res +10<CR>:term")
-- 按两下空格跳转到占位符<++>,并进入插入模式
mapkey("", "<LEADER><LEADER>", "<Esc>/<++><CR>:nohlsearch<CR>c4l")
-- 拼写检查
mapcmd("<LEADER>sc", "set spell!")
-- 运行代码
vim.cmd([[
au filetype dart noremap r :wall<cr>:term tmux a <cr>
au filetype python noremap r :wall<cr>:set splitbelow<cr>:sp<cr>:term python %<cr>
au filetype go noremap r :wall<cr>:set splitbelow<cr>:sp<cr>:term go run %<cr>
au filetype markdown noremap r :MarkdownPreview<cr>
au filetype rust noremap r :wall<cr>:set splitbelow<cr>:sp<cr>:term cargo run<cr>
]])
-- ===
-- === map function external environment
-- ===
-- 下面的函数给外部文件调用的
-- 使用示例如下
-- local map = require("core.keymap")
-- map:cmd('<space>p','PasteImg')
local map = {}
function map:key(mode, lhs, rhs)
vim.api.nvim_set_keymap(mode, lhs, rhs, { noremap = true })
end
function map:cmd(key, cmd)
vim.api.nvim_set_keymap('n', key, ':' .. cmd .. '<cr>', { noremap = true })
end
function map:lua(key, txt)
vim.api.nvim_set_keymap('n', key, ':lua ' .. txt .. '<cr>', { noremap = true })
end
return map

View file

@ -0,0 +1,197 @@
local table_line_char = {
{ ':', ':' },
{ ':', '-' },
{ '-', ':' },
}
local table_line_char_insert = {
{ ':', ':' },
{ ':', ' ' },
{ ' ', ':' },
}
---Check if the line_number is a markdown table
---@param line_number integer
---@return integer
local function check_markdown_table(line_number)
local line = vim.api.nvim_buf_get_lines(0, line_number - 1, line_number, true)[1]
return string.match(line, '^|.*|$')
end
---Find the starting or ending line of the markdown table
---@param range integer 1 or -1
---@return integer
local function find_markdown_table(range)
local cursor_line, end_line = vim.fn.line('.'), range == -1 and 1 or vim.fn.line('$')
for l = cursor_line, end_line, range do
if not check_markdown_table(l) then
return l - range
end
if (range == -1 and l == 1) or (range == 1 and l == vim.fn.line('$')) then --- if in the first line or last line
return l
end
end
return -1
end
---Get markdown table cells width
---@param table_contents table
---@return table integers
local function get_markdown_table_cells_width(table_contents)
local width = {}
for _ = 1, #table_contents[1], 1 do
table.insert(width, 0)
end
for i = 1, #table_contents, 1 do
if i ~= 2 then
for _, cell in ipairs(table_contents[i]) do
width[_] = math.max(width[_], cell and vim.fn.strdisplaywidth(cell) or 0)
end
end
end
return width
end
---Update markdown table's cell contents
---@param table_contents table
---@param width table
---@return table
local function update_cell_contents(table_contents, width)
local function add_space(cell, num) -- add space at markdown table cell contents
cell = ' ' .. cell .. ' '
cell = cell .. string.rep(' ', num)
return cell
end
local function get_chars(cell) -- add chars at second line's left and right
local char_left = string.sub(cell, 1, 1)
local char_right = string.sub(cell, #cell)
return { char_left, char_right }
end
local function get_table_line_char_id(chars) -- get chars at second line's left and right
for i, v in ipairs(table_line_char) do -- leave insert
if chars[1] == v[1] and chars[2] == v[2] then
return i
end
end
for i, v in ipairs(table_line_char_insert) do -- type "|"
if chars[1] == v[1] and chars[2] == v[2] then
return i
end
end
return 0
end
local function add_chars(cell, chars) -- update cell contents at second line's left and right
cell = chars[1] .. cell .. chars[2]
return cell
end
for i, cells in ipairs(table_contents) do -- traversal markdown table lines and update
if i == 2 then
for j, _ in ipairs(cells) do
local chars = get_chars(table_contents[i][j])
local id = get_table_line_char_id(chars)
table_contents[i][j] = string.rep('-', width[j])
table_contents[i][j] =
add_chars(table_contents[i][j], id ~= 0 and table_line_char[id] or { '-', '-' })
end
else
for j, cell in ipairs(cells) do
local change_length = width[j] - vim.fn.strdisplaywidth(cell)
table_contents[i][j] = add_space(cell, change_length)
end
end
end
return table_contents
end
---change every lines's tables to string
---@param table_contents table
---@return table
local function cells_to_table(table_contents)
local corner_char = '|'
for i = 1, #table_contents, 1 do
local line = corner_char
for j = 1, #table_contents[i], 1 do
line = line .. table_contents[i][j] .. corner_char
end
table_contents[i] = line
end
return table_contents
end
local function format_markdown_table()
if not check_markdown_table(vim.fn.line('.')) then -- check if the curso is in markdown table
return
end
-- find the staring line and ending line of markdown table
local table_start_line, table_end_line = find_markdown_table(-1), find_markdown_table(1)
local table_contents = {}
---change table to cells
---@param line string
---@param lnum integer
local function table_to_cells(line, lnum)
local table_cells = {}
for cell in line:gmatch('([^|]+)%|') do
if lnum ~= 1 then
cell = cell:match('^%s*(.-)%s*$')
end
table.insert(table_cells, cell)
end
table.insert(table_contents, table_cells)
end
-- traversal markdown table lines
for lnum = table_start_line, table_end_line, 1 do
local line = vim.api.nvim_buf_get_lines(0, lnum - 1, lnum, true)[1]
table_to_cells(line, lnum - table_start_line)
end
local width = get_markdown_table_cells_width(table_contents)
table_contents = update_cell_contents(table_contents, width)
table_contents = cells_to_table(table_contents)
vim.api.nvim_buf_set_lines(0, table_start_line - 1, table_end_line, true, table_contents)
end
local function format_markdown_table_lines()
local current_line = vim.api.nvim_get_current_line()
local cursor_pos = vim.api.nvim_win_get_cursor(0)
local char = current_line:sub(cursor_pos[2], cursor_pos[2])
if char == '|' and cursor_pos[2] ~= 1 then
format_markdown_table()
local length = #vim.api.nvim_get_current_line()
vim.api.nvim_win_set_cursor(0, { cursor_pos[1], length })
end
end
-- return {
-- format_markdown_table = format_markdown_table,
-- format_markdown_table_lines = format_markdown_table_lines,
-- }
-- markdown_table_format
local au = vim.api.nvim_create_autocmd
local group = vim.api.nvim_create_augroup('KicamonGroup', {})
au('InsertLeave', {
group = group,
pattern = '*.md',
callback = function()
format_markdown_table()
end,
})
au('TextChangedI', {
group = group,
pattern = '*.md',
callback = function()
format_markdown_table_lines()
end,
})

25
lua/core/md-snippets.lua Normal file
View file

@ -0,0 +1,25 @@
vim.cmd([[
autocmd Filetype markdown inoremap <buffer> ,f <Esc>/<++><CR>:nohlsearch<CR>"_c4l
autocmd Filetype markdown inoremap <buffer> ,w <Esc>/<++><CR>:nohlsearch<CR>"_c5l<CR>
autocmd Filetype markdown inoremap <buffer> ,n ---<Enter><Enter>
autocmd Filetype markdown inoremap <buffer> ,b ****<++><Esc>F*hi
autocmd Filetype markdown inoremap <buffer> ,s ~~~~<++><Esc>F~hi
autocmd Filetype markdown inoremap <buffer> ,i **<++><Esc>F*i
autocmd Filetype markdown inoremap <buffer> ,d ``<++><Esc>F`i
autocmd Filetype markdown inoremap <buffer> ,c ```<Enter>```<Enter><Enter><++><Esc>3kA
autocmd Filetype markdown inoremap <buffer> ,m - [ ]
autocmd Filetype markdown inoremap <buffer> ,p ![](<++>) <Esc>F[a
autocmd Filetype markdown inoremap <buffer> ,a [](<++>) <Esc>F[a
autocmd Filetype markdown inoremap <buffer> ,1 #<Space>
autocmd Filetype markdown inoremap <buffer> ,2 ##<Space>
autocmd Filetype markdown inoremap <buffer> ,3 ###<Space>
autocmd Filetype markdown inoremap <buffer> ,4 ####<Space>
autocmd Filetype markdown inoremap <buffer> ,l --------<Enter>
]])
-- some modify
-- autocmd Filetype markdown inoremap <buffer> ,c ```<Enter><++><Enter>```<Enter><Enter><++><Esc>4kA
-- autocmd Filetype markdown inoremap <buffer> ,1 #<Space><Enter><++><Esc>kA
-- autocmd Filetype markdown inoremap <buffer> ,2 ##<Space><Enter><++><Esc>kA
-- autocmd Filetype markdown inoremap <buffer> ,3 ###<Space><Enter><++><Esc>kA
-- autocmd Filetype markdown inoremap <buffer> ,4 ####<Space><Enter><++><Esc>kA

80
lua/lazy/index.lua Normal file
View file

@ -0,0 +1,80 @@
-- delete follows if lazy install faild
-- ~/.local/share/nvim
-- ~/.local/state/nvim
-- ~/.cache/nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
-- 启动Lazy插件管理快捷键
vim.keymap.set("n", "<leader>l", ":Lazy<CR>", { noremap = true })
require("lazy").setup({
-- cmp自动补全
require("lazy.plugins.autocomplete").config,
-- lsp配置全局的错误和警告提示修复建议重命名变量格式化代码等等
require("lazy.plugins.lspconfig"),
-- 顶部的winbar,可以鼠标点击
require("lazy.plugins.winbar"),
-- 代码函数名称浏览时固定,`[c`可以跳转到上下文
require("lazy.plugins.stickyScroll"),
-- fold折叠根据treesitter来折叠可以兼容我设置的<leader>o快捷键
require("lazy.plugins.fold"),
-- 缩进彩虹和高亮
require("lazy.plugins.indentrainbow"),
-- 粘贴图片
require("lazy.plugins.imgclip"),
-- 图片预览
require("lazy.plugins.image"),
-- 翻译插件gtranslate
require("lazy.plugins.translate"),
-- git状态
require("lazy.plugins.gitstatus"),
-- outline大纲
require("lazy.plugins.outline"),
-- treesitter语法高亮
require("lazy.plugins.treesitter"),
-- rainbow彩虹括号
require("lazy.plugins.rainbow"),
-- tabular使用:Tab /=来格式化等号之类,特使符号要转义如:Tabularize /\/
require("lazy.plugins.tabular"),
-- surround,各种对字符的包裹{} [] ''
require("lazy.plugins.surround"),
-- pairs对字符括号自动补全另一半
require("lazy.plugins.pairs"),
-- flutter
require("lazy.plugins.flutter"),
-- markdown preview
require("lazy.plugins.markdownpreview"),
-- 底部状态栏+主题 themes
require("lazy.plugins.themes"),
-- 注释插件
require("lazy.plugins.comment"),
-- 文件缓冲标签栏
require("lazy.plugins.bufferline"),
-- explorer tree 文件列表现在已经换成yazi fm-nvim启动joshuto ranger Lazygit
require("lazy.plugins.filemanager"),
-- minifiles也是文件管理器功能较少
require("lazy.plugins.minifiles"),
-- telescope模糊查找
require("lazy.plugins.telescope"),
-- 代码雨插件
require("lazy.plugins.fun"),
-- 呈现颜色值颜色
require("lazy.plugins.color"),
-- sudo write
require("lazy.plugins.suda"),
-- jump使用flash.nvim插件实现f单个字母时按f下一处建议先esc退出再可视模式此时才可以继续使用f斜杠粘贴整个单词查找的时候不好用
-- require("lazy.plugins.jump"),
-- which-key使用多个字母快捷键停留时会提示
-- require("lazy.plugins.whichkey"),
-- cw推荐的indent缩进线hlchunk可以根据线条的款式来分辨缩进
-- require("lazy.plugins.indent"),
})

View file

@ -0,0 +1,203 @@
local M = {}
M.config = {
-- 使用nvim-cmp
'hrsh7th/nvim-cmp',
after = "SirVer/ultisnips",
dependencies = {
{ 'hrsh7th/cmp-nvim-lsp' },
{ 'hrsh7th/cmp-buffer' }, -- 缓冲区字符
{ 'hrsh7th/cmp-path' }, -- 补全路径
{ 'hrsh7th/cmp-cmdline' },
{
"onsails/lspkind.nvim", -- 补全的图标
lazy = false,
config = function()
require("lspkind").init()
end
},
-- 代码片段来源
{ 'SirVer/ultisnips', dependencies = { "honza/vim-snippets" }, },
{ 'quangnguyen30192/cmp-nvim-ultisnips' },
},
-- 使用coq_nvim补全
-- 自动启动默认情况下无法运行索性懒加载或者见lazy.nvim中的init
-- { 'ms-jpq/coq_nvim', build = 'python3 -m coq deps', lazy = true },
-- { 'ms-jpq/coq.artifacts' },
-- { 'ms-jpq/coq.thirdparty' },
config = function()
-- Set up nvim-cmp.
local cmp = require 'cmp'
local cmp_ultisnips_mappings = require("cmp_nvim_ultisnips.mappings")
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
cmp.setup({
snippet = {
-- REQUIRED - you must specify a snippet engine
-- 目录nvim/snippets/*: snippets using snipMate format
-- 目录nvim/UltiSnips/*: snippets using UltiSnips format
expand = function(args)
vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
end,
},
-- 和cw补全同一种风格样式
window = {
completion = {
-- winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
col_offset = -3,
side_padding = 0,
},
},
formatting = {
fields = { "kind", "abbr", "menu" },
format = function(entry, vim_item)
local kind = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = 50 })(entry, vim_item)
local strings = vim.split(kind.kind, "%s", { trimempty = true })
kind.kind = " " .. (strings[1] or "") .. " "
kind.menu = " (" .. (strings[2] or "") .. ")"
return kind
end,
},
mapping = cmp.mapping.preset.insert({
-- 召唤代码补全
['<c-o>'] = cmp.mapping.complete(),
['<c-space>'] = cmp.mapping.complete(),
-- 代码片段下一处位置
["<c-e>"] = cmp.mapping(
function()
cmp_ultisnips_mappings.compose { "expand", "jump_forwards" } (function() end)
end,
{ "i", "s", --[[ "c" (to enable the mapping in command mode) ]] }
),
-- 代码片段上一处位置
["<c-n>"] = cmp.mapping(
function(fallback)
cmp_ultisnips_mappings.jump_backwards(fallback)
end,
{ "i", "s", --[[ "c" (to enable the mapping in command mode) ]] }
),
-- 关闭代码补全和telescope冲突
['<c-f>'] = cmp.mapping({
i = function(fallback)
cmp.close()
fallback()
end
}),
['<c-y>'] = cmp.mapping({ i = function(fallback) fallback() end }),
-- cw的回车配置不会默认补全第一个在:输入命令的时候比较合适
-- ['<CR>'] = cmp.mapping({
-- i = function(fallback)
-- if cmp.visible() and cmp.get_active_entry() then
-- cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })
-- else
-- fallback()
-- end
-- end
-- }),
['<CR>'] = cmp.mapping({
i = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }),
c = function(fallback)
if cmp.visible() then
cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })
else
fallback()
end
end
}),
["<Tab>"] = cmp.mapping({
i = function(fallback)
if cmp.visible() then
cmp.select_next_item({ behavior = cmp.SelectBehavior.Insert })
elseif has_words_before() then
cmp.complete()
else
cmp_ultisnips_mappings.compose { "jump_forwards" } (function() end) -- 添加跳转代码片段下一处的功能
fallback()
end
end,
}),
["<S-Tab>"] = cmp.mapping({
i = function(fallback)
if cmp.visible() then
cmp.select_prev_item({ behavior = cmp.SelectBehavior.Insert })
else
fallback()
end
end,
}),
}),
sources = cmp.config.sources({
{ name = 'path' }, -- 本地路径补全
{ name = 'nvim_lsp' },
{ name = 'ultisnips' }, -- For ultisnips users.
}, {
{ name = 'buffer' },
})
})
-- Set configuration for specific filetype.
cmp.setup.filetype('gitcommit', {
sources = cmp.config.sources({
{ name = 'git' }, -- You can specify the `git` source if [you were installed it](https://github.com/petertriho/cmp-git).
}, {
{ name = 'buffer' },
})
})
-- 实现查找单词时根据上下文的补全,要输入多次回车,不太实用
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
-- cmp.setup.cmdline({ '/', '?' }, {
-- mapping = cmp.mapping.preset.cmdline(),
-- sources = {
-- { name = 'buffer' }
-- }
-- })
-- cmdline模式下的补全可以自动纠正大小写
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' }
}, {
{ name = 'cmdline' }
})
})
-- ===
-- === 自动补全coq,更改跳转代码片段快捷键和idea一样可以使用ctrl+space召唤补全窗口
-- ===
-- 代码补全自定义片段放在~/.config/nvim/coq-user-snippets目录下面,格式和snipMate一致除了后缀名是snip结尾
-- local lspconfig = require('lspconfig')
-- vim.g.coq_settings = {
-- auto_start = 'shut-up',
-- keymap = {
-- jump_to_mark = '<c-e>', -- 跳转至代码片段的下一个占位
-- pre_select = true -- 当有补全时预先选择第一个
-- }
-- }
-- -- Enable some language servers with the additional completion capabilities offered by coq_nvim
-- -- 具体查看https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
-- local servers = {
-- -- 'lua_ls',
-- -- 'marksman',
-- 'dartls',
-- 'pyright',
-- 'clangd',
-- 'gopls',
-- }
-- for _, lsp in ipairs(servers) do
-- lspconfig[lsp].setup(require('coq').lsp_ensure_capabilities({
-- -- on_attach = my_custom_on_attach,
-- }))
-- end
end
}
return M

View file

@ -0,0 +1,25 @@
-- ===
-- === 文件缓冲标签栏
-- ===
local map = require("core.keymap")
-- 在标签之间移动
map:cmd('tn', 'BufferLineCyclePrev')
map:cmd('ti', 'BufferLineCycleNext')
-- 移动标签的位置
map:cmd('tmn', 'BufferLineMovePrev')
map:cmd('tmi', 'BufferLineMoveNext')
-- 关闭标签貌似是neovim自带的完整命令bdelete
map:cmd('tq', 'bd')
return {
'akinsho/bufferline.nvim',
version = "*",-- 安装最新的稳定版
dependencies = 'kyazdani42/nvim-web-devicons',
config = function()
require("bufferline").setup {}
end
}

View file

@ -0,0 +1,23 @@
-- ===
-- === 关闭缓冲区的标签
-- ===
local map = require("core.keymap")
-- 关闭当前缓冲区标签
map:cmd('tq', 'BDelete this')
-- 关闭除当前标签外的其他标签
map:cmd('to', 'BDelete other')
return {
'kazhala/close-buffers.nvim',
config = function()
require('close_buffers').setup({
filetype_ignore = {}, -- Filetype to ignore when running deletions
file_glob_ignore = {}, -- File name glob pattern to ignore when running deletions (e.g. '*.md')
file_regex_ignore = {}, -- File name regex pattern to ignore when running deletions (e.g. '.*[.]md')
preserve_window_layout = { 'this', 'nameless' }, -- Types of deletion that should preserve the window layout
next_buffer_cmd = nil, -- Custom function to retrieve the next buffer when preserving window layout
})
end
}

View file

@ -0,0 +1,7 @@
return {
'norcalli/nvim-colorizer.lua',
config = function()
require'colorizer'.setup()
end
}

View file

@ -0,0 +1,21 @@
-- ===
-- === 注释插件
-- ===
-- 注释快捷键
local map = require("core.keymap")
map:key("n", "<space>cn", "<Plug>kommentary_line_increase")
map:key("x", "<space>cn", "<Plug>kommentary_visual_increase<esc>") -- 选择模式下注释/反注释后退出该模式
map:key("n", "<space>cu", "<Plug>kommentary_line_decrease")
map:key("x", "<space>cu", "<plug>kommentary_visual_decrease<esc>")
return {
'b3nj5m1n/kommentary',
config = function()
-- 默认只使用单行注释
require('kommentary.config').configure_language("default", {
prefer_single_line_comments = true,
})
end
}

View file

@ -0,0 +1,62 @@
-- ===
-- === explorer tree 文件列表 fm-nvim启动joshuto ranger Lazygit
-- ===
return {
"DreamMaoMao/yazi.nvim", -- 使用yazi替代joshuto和ranger,仍然使用fm-nvim来启动lazygit
dependencies = {
"nvim-telescope/telescope.nvim",
"nvim-lua/plenary.nvim",
'is0n/fm-nvim',commit = 'ad7b80dc99cb8b14977f7ea233a9a299dc8879c0', -- 这个提交解决了joshuto无法启动的问题
},
keys = {
{ "tt", "<cmd>Yazi<CR>", desc = "Toggle Yazi" },
{ "<c-g>", "<cmd>Lazygit<CR>", desc = "Toggle Lazygit" },
},
config = function()
require('fm-nvim').setup{
-- UI Options
ui = {
float = {
-- Floating window border (see ':h nvim_open_win')
border = "single",
-- Num from 0 - 1 for measurements
height = 0.9,
width = 0.8,
},
},
}
end
}
-- local map = require("core.keymap")
-- -- 打开文件树
-- -- map:cmd('tt', "Ranger")
-- map:cmd('tt', "Joshuto")
-- -- 使用lazygit
-- map:cmd('<c-g>', "Lazygit")
-- return {
-- 'is0n/fm-nvim',
-- commit = 'ad7b80dc99cb8b14977f7ea233a9a299dc8879c0', -- 这个提交解决了joshuto无法启动的问题
-- config = function()
-- require('fm-nvim').setup{
-- -- UI Options
-- ui = {
-- float = {
-- -- Floating window border (see ':h nvim_open_win')
-- border = "single",
-- -- Num from 0 - 1 for measurements
-- height = 0.9,
-- width = 0.8,
-- },
-- },
-- -- Terminal commands used w/ file manager (have to be in your $PATH)
-- cmds = {
-- joshuto_cmd = "",
-- },
-- }
-- end
-- }

View file

@ -0,0 +1,17 @@
-- ===
-- === flutter-tools
-- ===
return {
'akinsho/flutter-tools.nvim',
dependencies = {
'nvim-lua/plenary.nvim',
'dart-lang/dart-vim-plugin',
},
ft= {"dart"},
lazy = true,
config = function()
require("flutter-tools").setup {} -- use defaults
end
}

28
lua/lazy/plugins/fold.lua Normal file
View file

@ -0,0 +1,28 @@
-- ufo关于折叠的设置
vim.o.foldcolumn = '0' -- '0' is not bad,其他的会有奇怪的数字
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevelstart = 99
vim.o.foldenable = true
-- 设置可折叠处的样式
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
return {
'kevinhwang91/nvim-ufo',
dependencies = 'kevinhwang91/promise-async',
config = function()
-- Option 3: treesitter as a main provider instead
-- Only depend on `nvim-treesitter/queries/filetype/folds.scm`,
-- performance and stability are better than `foldmethod=nvim_treesitter#foldexpr()`
require('ufo').setup({
provider_selector = function(bufnr, filetype, buftype)
return {'treesitter', 'indent'}
end
})
-- 键盘映射,这里的按键会打开或折叠全部的可折叠位置
vim.keymap.set('n', 'zR', require('ufo').openAllFolds)
vim.keymap.set('n', 'zM', require('ufo').closeAllFolds)
vim.keymap.set('n', 'zr', require('ufo').openFoldsExceptKinds)
vim.keymap.set('n', 'zm', require('ufo').closeFoldsWith) -- closeAllFolds == closeFoldsWith(0)
end
}

7
lua/lazy/plugins/fun.lua Normal file
View file

@ -0,0 +1,7 @@
return {
"Eandrju/cellular-automaton.nvim",
keys = "<leader>rr",
config = function()
vim.keymap.set("n", "<leader>rr", "<cmd>CellularAutomaton make_it_rain<CR>")
end,
}

View file

@ -0,0 +1,11 @@
-- ===
-- === git status/git状态
-- ===
return {
'lewis6991/gitsigns.nvim',
build = ':TSUpdate',
config = function()
require('gitsigns').setup()
end
}

View file

@ -0,0 +1,43 @@
return {
"3rd/image.nvim",
dependencies = {
"vhyrro/luarocks.nvim",
priority = 1001, -- this plugin needs to run before anything else
opts = {
rocks = { "magick" },
},
},
config = function()
-- default config
require("image").setup({
backend = "kitty",
-- backend = "ueberzug",
integrations = {
markdown = {
enabled = true,
clear_in_insert_mode = false, -- 插入模式的时候隐藏
download_remote_images = true,
only_render_image_at_cursor = false,
filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here
},
neorg = {
enabled = true,
clear_in_insert_mode = true,
download_remote_images = true,
only_render_image_at_cursor = false,
filetypes = { "norg" },
},
},
max_width = nil,
max_height = nil,
max_width_window_percentage = nil,
max_height_window_percentage = 50,
window_overlap_clear_enabled = true, -- 当打开重叠的浮动窗口时隐藏图片
window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "" },
editor_only_render_when_focused = false, -- auto show/hide images when the editor gains/looses focus
tmux_show_only_in_active_window = false, -- auto show/hide images in the correct Tmux window (needs visual-activity off)
hijack_file_patterns = { "*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.avif" }, -- render image files as images when opened
})
end
}

View file

@ -0,0 +1,30 @@
-- 导入键盘映射的函数
local map = require("core.keymap")
-- 获取当前文件名
local filename = vim.fn.expand("%:t")
-- 删除扩展,并添加连加符号`.`
filename = string.gsub(filename, "%..*", "") .. "."
-- 使用空格+p来粘贴间剪切板的图片,然后输入想保存的图片名称,
-- 图片会自动保存在当前文件的同一目录下并调整为markdown格式
map:cmd('<space>p','PasteImage')
return {
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
config = function()
require'img-clip'.setup {
default = {
dir_path = filename .. "assets", -- 图片保存路径:./文件名.assets
insert_mode_after_paste = false, -- 粘贴图片后不进入插入模式
},
filetypes = {
markdown = {
url_encode_path = true, ---@type boolean
template = "![$FILE_NAME_NO_EXT]($FILE_PATH)", -- 图片模板,中括号提示包含文件名
download_images = false, ---@type boolean
},
},
}
end
}

View file

@ -0,0 +1,29 @@
return {
"shellRaining/hlchunk.nvim",
-- 确保这个插件在lsp之后加载不然会显示为蓝色的线
event = "VeryLazy",
config = function()
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { pattern = "*", command = "EnableHL", })
require('hlchunk').setup({
chunk = {
enable = true,
use_treesitter = true,
style = {
{ fg = "#806d9c" },
},
},
indent = {
chars = { "", "¦", "", "", },
use_treesitter = false,
},
-- 不显示缩进空白处的点点
blank = {
enable = false,
},
-- 让左侧数字高亮
line_num = {
use_treesitter = true,
},
})
end
}

View file

@ -0,0 +1,43 @@
return {
"lukas-reineke/indent-blankline.nvim",
dependencies = {
"TheGLander/indent-rainbowline.nvim",
},
config = function()
opts = {}
-- Other blankline configuration here
require("ibl").setup(require("indent-rainbowline").make_opts(opts,{
-- How transparent should the rainbow colors be. 1 is completely opaque, 0 is invisible. 0.07 by default
color_transparency = 0.15,
-- The 24-bit colors to mix with the background. Specified in hex.
-- { 0xffff40, 0x79ff79, 0xff79ff, 0x4fecec, } by default
colors = { 0xff0000, 0x00ff00, 0x0000ff, 0xffff40, 0x79ff79, 0xff79ff, 0x4fecec},
}))
-- local highlight = {
-- "RainbowRed",
-- "RainbowYellow",
-- "RainbowBlue",
-- "RainbowOrange",
-- "RainbowGreen",
-- "RainbowViolet",
-- "RainbowCyan",
-- }
-- local hooks = require "ibl.hooks"
-- -- create the highlight groups in the highlight setup hook, so they are reset
-- -- every time the colorscheme changes
-- hooks.register(hooks.type.HIGHLIGHT_SETUP, function()
-- vim.api.nvim_set_hl(0, "RainbowRed", { fg = "#E06C75" })
-- vim.api.nvim_set_hl(0, "RainbowYellow", { fg = "#E5C07B" })
-- vim.api.nvim_set_hl(0, "RainbowBlue", { fg = "#61AFEF" })
-- vim.api.nvim_set_hl(0, "RainbowOrange", { fg = "#D19A66" })
-- vim.api.nvim_set_hl(0, "RainbowGreen", { fg = "#98C379" })
-- vim.api.nvim_set_hl(0, "RainbowViolet", { fg = "#C678DD" })
-- vim.api.nvim_set_hl(0, "RainbowCyan", { fg = "#56B6C2" })
-- end)
-- require("ibl").setup { indent = { highlight = highlight } }
end
}

19
lua/lazy/plugins/jump.lua Normal file
View file

@ -0,0 +1,19 @@
return {
"folke/flash.nvim",
event = "VeryLazy",
config = function()
require('flash').setup {
labels = "arstdhneioqwfpgjluyzxcvbkm",
modes = {
-- options used when flash is activated through
-- a regular search with `/` or `?`
search = {
-- when `true`, flash will be activated during regular search by default.
-- You can always toggle when searching with `require("flash").toggle()`
enabled = true,
},
}
}
end
}

View file

@ -0,0 +1,89 @@
return {
'VonHeikemen/lsp-zero.nvim',
branch = 'v3.x',
dependencies = {
{ 'neovim/nvim-lspconfig' },
{'williamboman/mason.nvim'},
{'williamboman/mason-lspconfig.nvim'},
{
"MysticalDevil/inlay-hints.nvim",
event = "LspAttach",
config = function()
require("inlay-hints").setup()
end
}
},
config = function()
-- 打算启用的语言服务列表
local servers = {
'marksman', -- 任意标题<space>aw打开code action可以开头生成目录超链接可以链接到同一个git项目的其他markdown文件#指定标题<space>h可以预览
'lua_ls',
'pyright',
'gopls',
'rust_analyzer',
}
-- lsp_zero的相关配置
local lsp_zero = require('lsp-zero')
lsp_zero.on_attach(function(client, bufnr)
lsp_zero.default_keymaps({ buffer = bufnr })
local opts = { buffer = bufnr }
vim.keymap.set('n', '<leader>h', vim.lsp.buf.hover, opts) -- <space>h显示提示文档
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) -- gd跳转到定义的位置
vim.keymap.set('n', 'go', vim.lsp.buf.type_definition, opts) -- go跳转到变量类型定义的位置
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) -- gr跳转到引用了对应变量或函数的位置
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts) -- <space>rn变量重命名
vim.keymap.set({ 'n', 'x' }, '<leader>f', function() vim.lsp.buf.format({ async = true }) end, opts) -- <space>f进行代码格式化
vim.keymap.set('n', '<leader>aw', vim.lsp.buf.code_action, opts) -- <space>aw可以在出现警告或错误的地方打开建议的修复方法
vim.keymap.set('n', '<leader>d', vim.diagnostic.open_float, opts) -- <space>d浮动窗口显示所在行警告或错误信息
vim.keymap.set('n', '<leader>-', vim.diagnostic.goto_prev, opts) -- <space>-跳转到上一处警告或错误的地方
vim.keymap.set('n', '<leader>=', vim.diagnostic.goto_next, opts) -- <space>+跳转到下一处警告或错误的地方
end)
-- “符号栏”是行号旁边的装订线中的一个空格。当一行中出现警告或错误时Neovim 会向您显示一个字母
lsp_zero.set_sign_icons({
error = '',
warn = '',
hint = '',
info = '»'
})
-- 通过mason来自动安装语言服务器可以在对应的代码运行LspIstall来安装可用的语言服务器
require('mason').setup({})
require('mason-lspconfig').setup({
ensure_installed = servers -- 直接把前面的servers列表传递过来
})
-- cmp相关配置通过for读取servers列表循环批量激活语言服务
local capabilities = require("cmp_nvim_lsp").default_capabilities()
local lspconfig = require('lspconfig')
for _, lsp in ipairs(servers) do
lspconfig[lsp].setup {
-- on_attach = my_custom_on_attach,
capabilities = capabilities,
settings = {
gopls = {
hints = { -- gopls开启hints
rangeVariableTypes = true,
parameterNames = true,
constantValues = true,
assignVariableTypes = true,
compositeLiteralFields = true,
compositeLiteralTypes = true,
functionTypeParameters = true,
}
},
Lua = {
hint = { -- Lua开启hints
enable = true, -- necessary
},
diagnostics = {
-- 忽略掉vim配置时一些全局变量语言服务器找不到的警告
globals = {
'vim',
'require',
'opts',
},
},
},
},
}
end
end
}

View file

@ -0,0 +1,16 @@
-- ===
-- === markdown preview
-- ===
return {
"iamcco/markdown-preview.nvim",
build = "cd app && npm install",
init = function() vim.g.mkdp_filetypes = { "markdown" } end,
ft = { "markdown" },
lazy = true,
config = function()
-- 设置使用谷歌浏览器进行预览
vim.g.mkdp_browser = '/usr/bin/google-chrome-stable'
end
}

View file

@ -0,0 +1,21 @@
return {
'echasnovski/mini.files',
config = function()
require('mini.files').setup{
mappings = {
close = 'q',
go_in = 'I',
go_in_plus = 'i',
go_out = 'N',
go_out_plus = 'n',
reset = '<BS>',
reveal_cwd = '@',
show_help = 'g?',
synchronize = '=',
trim_left = '<',
trim_right = '>',
}
}
end
}

View file

@ -0,0 +1,30 @@
-- ===
-- === outlines,大纲,函数变量结构
-- ===
local map = require("core.keymap")
-- 空格+v打开大纲,N全部收起,n收起当前节点,r重命名,I展开全部节点,i展开当前节点
map:cmd('<space>v', 'SymbolsOutline')
return {
'simrat39/symbols-outline.nvim',
config = function()
require("symbols-outline").setup {
width = 20,
keymaps = { -- These keymaps can be a string or a table for multiple keys
close = {"<Esc>", "q"},
goto_location = "<Cr>",
focus_location = "o",
hover_symbol = "<C-space>",
toggle_preview = "K",
rename_symbol = "r",
code_actions = "a",
fold = "n",
unfold = "i",
fold_all = "N",
unfold_all = "I",
fold_reset = "R",
}
}
end
}

View file

@ -0,0 +1,19 @@
return {
'windwp/nvim-autopairs',
config = function()
-- 配合cmp,我也不知道有啥效果
-- local cmp_autopairs = require('nvim-autopairs.completion.cmp')
-- local cmp = require('cmp')
-- cmp.event:on(
-- 'confirm_done',
-- cmp_autopairs.on_confirm_done()
-- )
require('nvim-autopairs').setup({
-- 在写markdown时禁用括号补全
disable_filetype = {"markdown"},
-- can use treesitter to check for a pair.
check_ts = true,
})
end
}

View file

@ -0,0 +1,21 @@
-- ===
-- === rainbow彩虹括号必须要保证安装了treesitter,我分开是为了方便通过文件查找配置
-- ===
return {
'p00f/nvim-ts-rainbow',
config = function()
require("nvim-treesitter.configs").setup {
rainbow = {
-- `false` will disable the whole extension
enable = true,
-- disable = { "jsx", "cpp" }, list of languages you want to disable the plugin for
extended_mode = true, -- Also highlight non-bracket delimiters like html tags, boolean or table: lang -> boolean
max_file_lines = nil, -- Do not enable for files with more than n lines, int
-- colors = {}, -- table of hex strings
-- termcolors = {} -- table of colour name strings
}
}
end
}

View file

@ -0,0 +1,23 @@
return {
"nvim-treesitter/nvim-treesitter-context",
config = function()
vim.keymap.set("n", "[c", function()
require("treesitter-context").go_to_context(vim.v.count1)
end, { silent = true })
require'treesitter-context'.setup{
enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit.
min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit.
line_numbers = true,
multiline_threshold = 20, -- Maximum number of lines to show for a single context
trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer'
mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline'
-- Separator between context and content. Should be a single character string, like '-'.
-- When separator is set, the context will only show up when there are at least 2 lines above cursorline.
separator = nil,
zindex = 20, -- The Z-index of the context window
on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching
}
end
}

View file

@ -0,0 +1,4 @@
return {
'lambdalisue/suda.vim'
}

View file

@ -0,0 +1,21 @@
-- ===
-- === mini.nvim surround,各种对字符的包裹{} [] ''
-- ===
return {
'echasnovski/mini.nvim',
branch = 'stable',
config = function()
require('mini.surround').setup {
mappings = {
add = 's', -- Add surrounding
delete = 'sd', -- Delete surrounding
find = 'sf', -- Find surrounding (to the right)
find_left = 'sF', -- Find surrounding (to the left)
highlight = 'sh', -- Highlight surrounding
replace = 'cs', -- Replace surrounding/change sround
update_n_lines = 'sn', -- Update `n_lines`
},
}
end
}

View file

@ -0,0 +1,5 @@
-- tabular使用:Tab /=来格式化等号之类,特使符号要转义如:Tabularize /\/
return {
'godlygeek/tabular'
}

View file

@ -0,0 +1,52 @@
return {
'nvim-telescope/telescope.nvim',
branch = '0.1.x',
dependencies = {
'nvim-lua/plenary.nvim',
},
config = function()
local builtin = require('telescope.builtin')
-- ctrl+t打开文件查找
vim.keymap.set('n', '<c-t>', builtin.find_files, {})
-- ctrl+f打开字符串查找
vim.keymap.set('n', '<c-f>', '<cmd>lua require("telescope.builtin").grep_string({ search = vim.fn.input("Grep For > "), only_sort_text = true, })<cr>', { noremap = true })
-- 下面的配置从cw的配置粘贴过来的删除一部分看不懂的
local ts = require('telescope')
ts.setup({
defaults = {
vimgrep_arguments = {
"rg",
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
"--fixed-strings",
"--smart-case",
"--trim",
},
layout_config = {
width = 0.9,
height = 0.9,
},
mappings = {
i = {
["<C-h>"] = "which_key",
["<C-u>"] = "move_selection_previous",
["<C-e>"] = "move_selection_next",
["<C-l>"] = "preview_scrolling_up",
["<C-y>"] = "preview_scrolling_down",
["<esc>"] = "close",
}
},
color_devicons = true,
prompt_prefix = "🔍 ",
selection_caret = "",
path_display = { "truncate" },
file_previewer = require("telescope.previewers").vim_buffer_cat.new,
grep_previewer = require("telescope.previewers").vim_buffer_vimgrep.new,
},
})
end
}

253
lua/lazy/plugins/themes.lua Normal file
View file

@ -0,0 +1,253 @@
-- ===
-- === 底部状态栏+onedark主题
-- ===
return {
'nvim-lualine/lualine.nvim',
dependencies = {
'kyazdani42/nvim-web-devicons', -- 图标
'navarasu/onedark.nvim', -- onedark主题
},
config = function()
-- Eviline config for lualine
-- Author: shadmansaleh
-- Credit: glepnir
local lualine = require('lualine')
-- Color table for highlights
-- stylua: ignore
local colors = {
bg = '#202328',
fg = '#bbc2cf',
yellow = '#ECBE7B',
cyan = '#008080',
darkblue = '#081633',
green = '#98be65',
orange = '#FF8800',
violet = '#a9a1e1',
magenta = '#c678dd',
blue = '#51afef',
red = '#ec5f67',
}
local conditions = {
buffer_not_empty = function()
return vim.fn.empty(vim.fn.expand('%:t')) ~= 1
end,
hide_in_width = function()
return vim.fn.winwidth(0) > 80
end,
check_git_workspace = function()
local filepath = vim.fn.expand('%:p:h')
local gitdir = vim.fn.finddir('.git', filepath .. ';')
return gitdir and #gitdir > 0 and #gitdir < #filepath
end,
}
-- Config
local config = {
options = {
-- Disable sections and component separators
component_separators = '',
section_separators = '',
theme = {
-- We are going to use lualine_c an lualine_x as left and
-- right section. Both are highlighted by c theme . So we
-- are just setting default looks o statusline
normal = { c = { fg = colors.fg, bg = colors.bg } },
inactive = { c = { fg = colors.fg, bg = colors.bg } },
},
},
sections = {
-- these are to remove the defaults
lualine_a = {},
lualine_b = {},
lualine_y = {},
lualine_z = {},
-- These will be filled later
lualine_c = {},
lualine_x = {},
},
inactive_sections = {
-- these are to remove the defaults
lualine_a = {},
lualine_b = {},
lualine_y = {},
lualine_z = {},
lualine_c = {},
lualine_x = {},
},
}
-- Inserts a component in lualine_c at left section
local function ins_left(component)
table.insert(config.sections.lualine_c, component)
end
-- Inserts a component in lualine_x ot right section
local function ins_right(component)
table.insert(config.sections.lualine_x, component)
end
ins_left {
function()
return ''
end,
color = { fg = colors.blue }, -- Sets highlighting of component
padding = { left = 0, right = 1 }, -- We don't need space before this
}
ins_left {
-- mode component
function()
return ''
end,
color = function()
-- auto change color according to neovims mode
local mode_color = {
n = colors.red,
i = colors.green,
v = colors.blue,
[''] = colors.blue,
V = colors.blue,
c = colors.magenta,
no = colors.red,
s = colors.orange,
S = colors.orange,
[''] = colors.orange,
ic = colors.yellow,
R = colors.violet,
Rv = colors.violet,
cv = colors.red,
ce = colors.red,
r = colors.cyan,
rm = colors.cyan,
['r?'] = colors.cyan,
['!'] = colors.red,
t = colors.red,
}
return { fg = mode_color[vim.fn.mode()] }
end,
padding = { right = 1 },
}
ins_left {
-- filesize component
'filesize',
cond = conditions.buffer_not_empty,
}
ins_left {
'filename',
cond = conditions.buffer_not_empty,
color = { fg = colors.magenta, gui = 'bold' },
}
ins_left { 'location' }
ins_left { 'progress', color = { fg = colors.fg, gui = 'bold' } }
ins_left {
'diagnostics',
sources = { 'nvim_diagnostic' },
symbols = { error = '', warn = '', info = '' },
diagnostics_color = {
color_error = { fg = colors.red },
color_warn = { fg = colors.yellow },
color_info = { fg = colors.cyan },
},
}
-- Insert mid section. You can make any number of sections in neovim :)
-- for lualine it's any number greater then 2
ins_left {
function()
return '%='
end,
}
ins_left {
-- Lsp server name .
function()
local msg = 'No Active Lsp'
local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
local clients = vim.lsp.get_active_clients()
if next(clients) == nil then
return msg
end
for _, client in ipairs(clients) do
local filetypes = client.config.filetypes
if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
return client.name
end
end
return msg
end,
icon = ' LSP:',
color = { fg = '#ffffff', gui = 'bold' },
}
-- Add components to right sections
ins_right {
'o:encoding', -- option component same as &encoding in viml
fmt = string.upper, -- I'm not sure why it's upper case either ;)
cond = conditions.hide_in_width,
color = { fg = colors.green, gui = 'bold' },
}
ins_right {
'fileformat',
fmt = string.upper,
icons_enabled = false, -- I think icons are cool but Eviline doesn't have them. sigh
color = { fg = colors.green, gui = 'bold' },
}
ins_right {
'branch',
icon = '',
color = { fg = colors.violet, gui = 'bold' },
}
ins_right {
'diff',
-- Is it me or the symbol for modified us really weird
symbols = { added = '', modified = '', removed = '' },
diff_color = {
added = { fg = colors.green },
modified = { fg = colors.orange },
removed = { fg = colors.red },
},
cond = conditions.hide_in_width,
}
ins_right {
function()
return ''
end,
color = { fg = colors.blue },
padding = { left = 1 },
}
-- Now don't forget to initialize lualine
lualine.setup(config)
-- ===
-- === 主题配置 theme
-- ===
-- vim.cmd 'colorscheme space-vim-dark'
-- 使用灰色注释
vim.cmd 'hi Comment guifg=#5C6370 ctermfg=59'
-- 使用透明背景
-- vim.cmd 'hi Normal ctermbg=NONE guibg=NONE'
-- vim.cmd 'hi LineNr ctermbg=NONE guibg=NONE'
-- vim.cmd 'hi SignColumn ctermbg=NONE guibg=NONE'
-- dark,darker,cool,deep,warm,warmer
require('onedark').setup {
style = 'darker'
}
require('onedark').load()
end
}

View file

@ -0,0 +1,13 @@
-- 可视视图下
return {
"kraftwerk28/gtranslate.nvim",
dependencies = "nvim-lua/plenary.nvim",
config = function()
vim.api.nvim_set_keymap('n', 'tr', "viw:'<,'>Translate<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap('v', 'tr', ":'<,'>Translate<CR>", { noremap = true, silent = true })
require("gtranslate").setup {
default_to_language = "Chinese_Simplified",
}
end
}

View file

@ -0,0 +1,40 @@
-- ===
-- === treesitter,语法高亮
-- ===
return {
'nvim-treesitter/nvim-treesitter',
config = function()
-- 要安装高亮的语言直接加入括号即可把sync_install设置为true下次进入vim自动安装语言列表查看treesitter的github
-- 或者执行:TSInstall <language_to_install>
local language = {
"python",
"lua",
"dart",
"markdown",
"go",
"bash",
"java",
"sql",
}
require("nvim-treesitter.configs").setup {
-- A list of parser names, or "all"
ensure_installed = language,
-- Install parsers synchronously (only applied to `ensure_installed`)
sync_install = true,
-- List of parsers to ignore installing (for "all")
ignore_install = {},
highlight = {
enable = true,
-- list of language that will be disabled
disable = {},
-- Setting this to true will run `:h syntax` and tree-sitter at the same time.
-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
-- Using this option may slow down your editor, and you may see some duplicate highlights.
-- Instead of true it can also be a list of languages
additional_vim_regex_highlighting = false,
},
}
end
}

View file

@ -0,0 +1,17 @@
return {
"folke/which-key.nvim",
event = "VeryLazy",
init = function()
vim.o.timeout = true
vim.o.timeoutlen = 300
end,
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
},
config = function()
require("which-key").setup {}
end
}

View file

@ -0,0 +1,73 @@
return {
"Bekaboo/dropbar.nvim",
config = function()
local api = require("dropbar.api")
vim.keymap.set('n', '<Leader>;', api.pick)
vim.keymap.set('n', '[c', api.goto_context_start)
vim.keymap.set('n', ']c', api.select_next_context)
local confirm = function()
local menu = api.get_current_dropbar_menu()
if not menu then
return
end
local cursor = vim.api.nvim_win_get_cursor(menu.win)
local component = menu.entries[cursor[1]]:first_clickable(cursor[2])
if component then
menu:click_on(component)
end
end
local quit_curr = function()
local menu = api.get_current_dropbar_menu()
if menu then
menu:close()
end
end
require("dropbar").setup({
menu = {
-- When on, automatically set the cursor to the closest previous/next
-- clickable component in the direction of cursor movement on CursorMoved
quick_navigation = true,
---@type table<string, string|function|table<string, string|function>>
keymaps = {
['<LeftMouse>'] = function()
local menu = api.get_current_dropbar_menu()
if not menu then
return
end
local mouse = vim.fn.getmousepos()
if mouse.winid ~= menu.win then
local parent_menu = api.get_dropbar_menu(mouse.winid)
if parent_menu and parent_menu.sub_menu then
parent_menu.sub_menu:close()
end
if vim.api.nvim_win_is_valid(mouse.winid) then
vim.api.nvim_set_current_win(mouse.winid)
end
return
end
menu:click_at({ mouse.line, mouse.column }, nil, 1, 'l')
end,
['<CR>'] = confirm,
['i'] = confirm,
['<esc>'] = quit_curr,
['q'] = quit_curr,
['n'] = quit_curr,
['<MouseMove>'] = function()
local menu = api.get_current_dropbar_menu()
if not menu then
return
end
local mouse = vim.fn.getmousepos()
if mouse.winid ~= menu.win then
return
end
menu:update_hover_hl({ mouse.line, mouse.column - 1 })
end,
},
},
})
end
}