【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

这篇具有很好参考价值的文章主要介绍了【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

1. 目的

习惯了 VSCode 默认的配色:黑色主题,蓝色状态栏。偶尔使用 Vim 时想让 vim 伪装的像 VSCode,不考虑花里花哨的插件和动态效果,静态效果上让 vim 看起来像 VSCode,怎样实现呢?

2. 理念: vimsolo

vimsolo = vim + solo,除了颜色主题可以用第三方插件, 其他配置都用 .vimrc 手工完成,不依赖库插件。

vimsolo 的理念是: vim 插件如果装多了,配置繁杂,受网络影响较大,还需要适配不同 vim/nvim 版本和 nerdfont 字体, 而是极致的简洁。

3. vimrc: 配置颜色

VSCode 颜色主题的 vim 插件有好几个, 我用的是 codedark https://github.com/tomasiser/vim-code-dark

vimrc 中的配置代码:
【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

"--- color theme
set background=dark
try
    set t_Co=256
    set t_ut=
    colorscheme codedark
    ""colorscheme molokai
catch
    try
        colorscheme desert
    catch
        colorscheme peaksea
    endtry
endtry

用 vim 打开 Python 文件看看效果:
【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

4. vimrc: 配置状态栏

状态栏的插件有很多,很容易陷入选择的困境,因为都太漂亮了;而一一尝试和配置会花费不少时间,但容易漂浮在插件开发者配置的表层。其实基于 vimL 徒手可以写一个 statuline:

  • 本质是给变量 statusline 赋值
  • 把 statueline 拆分为n部分,每部分是一个字符串变量,变量之间用 . 连接起来
  • 每部分大都可以从 vim 自带的变量或函数获取到,例如文件编码是 let l:encoding = ' %{&fenc} '

【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置
具体配置 vimL 脚本如下:

"======================================================================
" statusline
"======================================================================
"--- https://bruhtus.github.io/posts/vim-statusline/
"--- https://jdhao.github.io/2019/11/03/vim_custom_statusline/
" component for active window
function! StatuslineActive()
  " if we want to add `f` items in our statusline

let g:currentmode={
       \ 'n'  : 'NORMAL',
       \ 'v'  : 'VISUAL',
       \ 'V'  : 'V·Line',
       \ "\<C-V>" : 'V·Block',
       \ 'i'  : 'INSERT',
       \ 'R'  : 'R',
       \ 'Rv' : 'V·Replace',
       \ 'c'  : 'Command',
       \}

  "let l:current_mode = mode()
  let l:current_mode = ' ['.'%{toupper(g:currentmode[mode()])}'.'] '
  " if we want to add 'm' items in our statusline
  let l:cursor_position = ' Ln %l, Col %c'
  let l:indentation = ' %{(&expandtab=="1") ? "Spaces: ".&tabstop : "Tabs: ".&tabstop} '
  let l:encoding = ' %{&fenc} '
  let l:end_of_line_sequence = ' %{(&fileformat=="dos")? "CRLF" : "LF"} '
  let l:percent = ' %p%% '
  let l:language_mode = '%{&filetype}'
  " the `.` is basically to ignore whitespace before and put it right after the previous component
  let l:statusline_left = l:current_mode
  let l:statusline_middle = ''
  let l:statusline_right = l:cursor_position.l:indentation.l:encoding.l:end_of_line_sequence.l:percent.l:language_mode
  return l:statusline_left.'%='.l:statusline_middle.'%='.l:statusline_right
endfunction

" component for inactive window
function! StatuslineInactive()
  " the component goes here
endfunction

" load statusline using `autocmd` event with this function
function! StatuslineLoad(mode)
  if a:mode ==# 'active'
    " to make it simple, %! is to evaluate the current changes in the window
    " it can be useful for evaluate current mode in statusline. For more info:
    " :help statusline.
    setlocal statusline=%!StatuslineActive()
  else
    setlocal statusline=%!StatuslineInactive()
  endif
endfunction

" so that autocmd didn't stack up and slow down vim
augroup statusline_startup
  autocmd!
  " for more info :help WinEnter and :help BufWinEnter
  autocmd WinEnter,BufWinEnter * call StatuslineLoad('active')
  autocmd WinLeave * call StatuslineLoad('inactive')
augroup END

hi StatusLine ctermbg=32 ctermfg=254 guibg=#007acc guifg=#dfe9ed
"hi StatusLineNC ctermbg=240 ctermfg=240 guibg=#d0d0d0 guifg=#444444

hi StatusLineTerm ctermbg=32 ctermfg=254 guibg=#007acc guifg=#dfe9ed
"hi StatusLineTermNC ctermbg=252 ctermfg=240 guibg=#d0d0d0 guifg=#444444
"-- #007acc
"-- #dfe9ed

配置效果:
【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

5. 拷贝颜色主题和.vimrc: python安装脚本

使用 Python 编写了安装脚本,相比于 shell 脚本,开发效率相当高, 平台兼容性更强。文章来源地址https://www.toymoban.com/news/detail-449073.html

import os
import shutil
import subprocess
import platform


def is_wsl():
    return 'microsoft-standard' in platform.uname().release

def is_windows():
    return platform.system().lower() == "windows"

def is_linux():
    return platform.system().lower() == "linux"

def is_macosx():
    return platform.system().lower() == "darwin"


class CommandRunner(object):
    @staticmethod
    def run(cmd, verbose = True):
        if (verbose):
            print('Executing cmd:', cmd)
        process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        if is_windows():
            # encoding = 'ISO-8859-1'
            encoding = 'gbk'
        else:
            encoding = 'utf-8'
        #print('encoding:', encoding)
        out_bytes = process.communicate()[0]
        err_bytes = process.communicate()[1]
        out_msg = out_bytes.decode(encoding)
        err_msg = out_bytes.decode(encoding)
        if (verbose):
            print('Command executing stdout: {:s}'.format(out_msg))
            print('Command executing stderr: {:s}'.format(err_msg))
        return out_msg, err_msg

def is_windows_git_bash():
    d = 'C:\\Users'
    return os.path.exists(d) and os.path.isdir(d)

def path_to_proper_abs_path(p):
    p_abs = os.path.abspath(p)
    if (is_windows_git_bash()):
        disk, remain = p_abs.split(':')
        res = "/{:s}/{:s}".format(disk, remain[1:])
        res = res.replace("\\", "/")
    else:
        res = p_abs
    return res

def copy_or_link_file(src, dst):
    # if is_windows_git_bash():
    #     shutil.copyfile(src, dst)
    # else:
    if (os.path.exists(dst)):
        os.remove(dst)
    elif (os.path.islink(dst)):
        os.remove(dst)
    src_abs = path_to_proper_abs_path(src) #os.path.abspath(src)
    dst_abs = path_to_proper_abs_path(dst) # os.path.abspath(dst)
    cmd = "ln -sf {:s} {:s}".format(src_abs, dst_abs)
    CommandRunner.run(cmd, True)


def copy_colors_dir(src_color_dir, dst_color_dir):
    os.makedirs(dst_color_dir, exist_ok=True)
    for item in os.listdir('colors'):
        src = 'colors/' + item
        dst = dst_color_dir + '/' + item
        copy_or_link_file(src, dst)

def get_vim_first_default_runtimepath():
    if (is_windows()):
        # return os.path.expanduser('~/vimfiles') # not working on windows 11
        return os.path.expanduser('~/.vim')
    elif is_macosx():
        return os.path.expanduser('~/vimfiles')
    elif is_linux():
        return os.path.expanduser('~/.vim')

def copy_vim_config():
    # copy .vimrc
    src = '.vimrc'
    dst = os.path.expanduser('~/.vimrc')
    copy_or_link_file(src, dst)

    vim_cfg_dir = os.path.expanduser('~/.vim')

    # copy colors dir
    rtp = get_vim_first_default_runtimepath()
    copy_colors_dir('colors', rtp + "/colors")

    # create undodir
    undodir = '{:s}/temp_dirs/undodir'.format(vim_cfg_dir)
    os.makedirs(undodir, exist_ok=True)


if __name__ == '__main__':
    copy_vim_config()

到了这里,关于【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode 主题的颜色定制

    setting.json 对比颜色: 对比色通常只用于高对比主题。如果设置了,它们会在UI元素周围添加额外的边框来增加对比度。 contrastActiveBorder :在活动元素周围添加额外的边框,以使它们与其他元素形成更大的对比。 contrastBorder :在元素周围加上额外的边框,将它们与其他元素隔开,

    2024年02月02日
    浏览(55)
  • vscode颜色主题的设置

    vscode的风格默认为深色,要修改颜色主题,vscode提供了多种配置方式 1、第一种 1)在主界面左侧的快捷工具栏中点击“功能”按钮,在展开的菜单中点击“颜色主题”。 2)在主界面的中上部弹出的点击选择您想要设置的颜色主题,此时vscode会立即切换到对应的颜色主题 2、

    2024年02月05日
    浏览(37)
  • 微信小程序自定义主题颜色【状态栏tab样式同步更改】

     此功能使用js控制变量 调整颜色值,赋值给css颜色达到切换自定义颜色效果 1.创建公共样式userStyle.js文件,通过定义style1和style2来控制全局颜色改变。 注意:颜色值务必为十六进制,避免API不兼容颜色 2.在index.js中引入userColor并放入data中。 打印userColor     3.index.wxml中将变

    2024年02月03日
    浏览(39)
  • 前端实现动态切换主题色-使用 css/less 动态更换主题颜色(换肤功能)或通过单击更改背景颜色

    提示: 以下是本篇文章正文内容,主要描述 使用 css/less 动态更换主题色(换肤功能) 提示: 使用 css/less 动态更换主题色(换肤功能), 方法共通,不限制技术栈: 其实在日常项目开发中经常会遇到有些用户想要一些自定义的的主题色来满足不同的视觉需求,这时候就需

    2024年02月15日
    浏览(56)
  • pycharm主题、颜色、字体设置

    说起python IDE 广为流传的就是 jupyter和pycharm,结果我刚开始学的时候反其道而行,用的是spyder,用了很长一段时间,特别喜欢,界面功能都很舒适,但是pycharm广为好评肯定是有她的原因的嘛,这不,由于项目需要,不得不改用pycharm。 刚换上pycharm各种不习惯,pycharm的初始界面

    2024年02月05日
    浏览(39)
  • ElementUI主题颜色动态切换并缓存

    今天给大家分享一下在Vue中使用ElementUI时,想切换主题颜色的两种方式。 第一种:静态改变项目中的主题颜色 比较简单,稍微带过: 项目中创建 element-variables.scss 文件,编写内容: 之后,在项目的入口文件中,直接引入以上样式文件即可(无需引入 Element 编译好的 CSS 文件

    2024年02月14日
    浏览(31)
  • vim背景颜色设置

    cd ~进入个人家目录下,vim .vimrc进入vimrc文件: 在主题设置部分对颜色背景进行设置,onedark表示黑色背景,default表示白色背景,按需设置即可!

    2024年02月12日
    浏览(34)
  • 【最全IDEA个性化教程】idea设置主题+恢复主题默认设置+设置选中代码颜色+关键字颜色+设置字体大小、样式、颜色+设置背景颜色、图片+设置导航栏背景颜色+设置控制台字体样式及背景+常用快捷键)

    主题亮暗设置 如果在系统自带的主题上进行了一些字体的个性化后想恢复默认设置,直接在更换主题处-点击小齿轮-选择Restore Defaults 进阶:下载主题使用 下载该主题的地址 idea更换主题,配置字体的教程参考 主题下好以后后缀为.jar 导入一下下好的主题,然后OK-OK-OK后IDEA会

    2024年02月03日
    浏览(83)
  • 修改element-ui主题颜色

    方法1:创建一个公共的更改的CSS文件,在CSS文件里写入 $–color-primary:加颜色,最后在main.js中引入 方法2:借助在线主题生成工具,设置自己想要的颜色,下载主题,解压之后,在main.js 中引入 方法3:安装主题工具 1、安装主题工具 2、从 npm 安装theme 3、初始化变量文件 4、根

    2024年02月11日
    浏览(59)
  • visual studio设置主题和背景颜色

        visual studio2019默认的主题有4种,分别是浅白色、深黑色、蓝色、蓝(额外对比度),背景颜色默认是纯白色RGB(255,255,255)。字体纯白色看久了,眼睛会感到酸痛、疲劳,建议改成浅白RGB(250,250,250)、豆沙绿RGB(85,123,105)、透明蓝白色RGB(248,249,253)、炫酷黑RGB(30,30,30)或RGB(50,50,50)等

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包