#!/bin/bash

# 定义 .vimrc 文件的路径
VIMRC_FILE="$HOME/.vimrc"

# 检查是否已经存在 .vimrc 文件
if [ -f "$VIMRC_FILE" ]; then
  echo ".vimrc 文件已存在: $VIMRC_FILE"
  read -p "是否覆盖现有文件？ (y/n): " overwrite
  if [[ "$overwrite" != "y" && "$overwrite" != "Y" ]]; then
    echo "操作已取消。"
    exit 0
  fi
fi

# 获取当前用户的用户名
USERNAME=$(whoami)

# 定义 Vim 配置内容 (从用户提供的配置中获取)
VIM_CONFIG=$(cat <<EOF
" ====================================================================
" 通用且优化的 Vim 配置文件 (.vimrc) - 优化版 (带注释)
" 适用于 Debian 及其他 Linux 发行版
" ====================================================================

" --------------------------------------------------------------------
" 基本设置
" --------------------------------------------------------------------
set nocompatible      " 关闭兼容模式，使用 Vim 的增强功能
filetype plugin indent on " 启用文件类型检测和缩进
syntax enable         " 启用语法高亮
" 防止自动注释延续到新行
autocmd FileType * setlocal formatoptions-=o formatoptions-=r
set backupcopy=yes  " 关闭复制备份文件为新文件导致修改inode


" 编码设置优化（预防中文乱码）
set encoding=utf-8       " 设置 Vim 内部编码为 UTF-8
set fileencodings=ucs-bom,utf-8,gbk,gb18030,big5,latin1 " 设置文件编码检测顺序 (优先检测 UTF-8 和中文常用编码)

" --------------------------------------------------------------------
" 界面优化
" --------------------------------------------------------------------
set laststatus=2        " 始终显示状态栏
set cursorline          " 高亮当前行，方便定位
set scrolloff=5         " 保持光标上方和下方至少 5 行的距离 (优化阅读体验)
"set listchars=tab:▸\ ,trail:· " 定义 Tab 和行尾空格的显示方式 (用▸表示 Tab，用·表示行尾空格)

" 状态栏设置
set statusline=%f\ %m%r%h%w\ %y\ %=%-14.(%l,%c%V%)\ %P

" --------------------------------------------------------------------
" 编辑增强
" --------------------------------------------------------------------
" 缩进优化
set expandtab        " 使用空格代替 Tab
set tabstop=4          " Tab 键显示宽度为 4 个空格
set shiftwidth=4       " 自动缩进宽度为 4 个空格
set softtabstop=-1     " 退格时删除完整缩进层级 (设置为 -1)

" 持久撤销功能
set undofile          " 启用持久撤销历史
set undodir=~/.vim/undo " 设置撤销文件保存目录
set wrap              " 自动换行

" 搜索优化
set hlsearch           " 开启搜索高亮
set incsearch          " 开启增量搜索 (输入时实时显示匹配结果)
set ignorecase         " 搜索时忽略大小写 (除非搜索模式包含大写字母)
set smartcase          " 搜索模式包含大写字母时，区分大小写
nnoremap <silent> <Leader>/ :nohlsearch<CR> " 快速取消搜索高亮 (按下 Leader+/ 即可)

" --------------------------------------------------------------------
" 视觉优化
" --------------------------------------------------------------------
colorscheme desert     " 设置配色方案为 desert (内置最佳配色方案之一)
set showmatch          " 高亮匹配括号
set matchtime=1        " 括号匹配高亮时间 (0.1 秒)
set diffopt+=iwhite    " diff的时候忽略空白

" --------------------------------------------------------------------
" 性能优化（Vim 9新增）
" --------------------------------------------------------------------
set lazyredraw        " 减少屏幕重绘次数
set updatetime=100    " 减少语法高亮延迟


" --------------------------------------------------------------------
" 快捷键映射
" --------------------------------------------------------------------
let mapleader = ","
nnoremap <Leader>x :confirm x<CR>
nnoremap <Leader>q :confirm q<CR>

" --------------------------------------------------------------------
" 系统集成
" --------------------------------------------------------------------
if has('termguicolors')
  set termguicolors
  " 修复终端兼容性问题
  if &term =~# '^screen'
    let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
    let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
  endif
endif

" 确保撤销目录存在
if !isdirectory(expand("~/.vim/undo"))
  silent !mkdir -p ~/.vim/undo
endif
EOF
)

# 将 Vim 配置内容写入 .vimrc 文件
echo "$VIM_CONFIG" > "$VIMRC_FILE"

# 检查写入是否成功
if [ $? -eq 0 ]; then
  echo "成功创建并写入 .vimrc 文件: $VIMRC_FILE"
  echo "请重启 Vim 或执行 :source ~/.vimrc 以应用配置。"
else
  echo "创建或写入 .vimrc 文件失败。"
fi

exit 
