NeoVim 学习笔记

这篇学习笔记将用于记录本人在学习使用 NeoVim 编辑器过程中所编写的学习心得与代码。该笔记将会存放在https://github.com/owlman/study_note项目的Software/DevelopmentTool目录下,并予以长期维护。

学习规划

  • 学习基础:

    • 掌握 Linux shell 命令的基本使用。
    • 掌握 Vim 编辑器的基本操作方法。
    • 有一两门编程语言的使用经验。
  • 学习环境:
    • Ubuntu Linux 操作系统。
  • 学习资料:

背景知识

NeoVim 起源

2014 年,巴西程序员 Thiago de Arruda Padilha(aka tarruda)曾经向 Vim 开源编辑器项目递交了两大补丁,其中包含了对 Vim 的架构进行大幅调整的建议,结果遭到了 Vim 作者 Bram Moolenaar 的拒绝。因为后者认为对于 Vim 这样一个成熟的项目进行如此大的改变风险太高。但或许在 tarruda 看来,Vim 这个上个世纪 90 年代初的产物,至今已经 20 多年了,该项目中不仅遗留了大量的历史痕迹,而且该项目的管理层如今在程序的维护、Bug 的修复、以及新特性的添加等问题上的态度都在变得越来越僵化,且难以与时俱进。

总而言之,基于对 Vim 项目的不满,并致力于打造一款面向 21 世纪的代码编辑器,tarruda 先生以众筹资金的方式发起了 Vim 的这个 fork 项目:NeoVim。在这里,Neo 这个单词表达的是其作者对 Vim 编辑器在这个新时代的重生期待。

NeoVim 现状

从 NeoVim 项目的提交记录可以看出,tarruda 先生是个非常有项目维护经验的人,其有条不紊的管理让 NeoVim 的版本迭代相当快速,基本上几天就会推送一个新的版本。目前来说, NeoVim 已经实现 Vim 大部分功能,并兼容了 Vim 百分之九十以上的配置。根据该项目的自述说明,它最终想实现以下目标 :

  • 通过简化项目的维护工作来改进 Bug 修复及特性添加的速度;
  • 在实现新的、现代化的用户界面时不必修改编辑器的核心源码;
  • 可利用新的、基于协同进程的新插件架构改善编辑器的扩展性;
  • 支持使用 Python 等多种第三方编程语言与 NeoVim 进行交互;

随着时间的推移,NeoVim 项目逐渐发展成为一个成熟的项目,并率先提供了多个 8.0 版本之前的 Vim 所没有的新特性:

  • 支持在 Vim 中打开命令行终端窗口,使用户不必退出编辑器就能执行 bash 命令;
  • 为 vimscript 提供了异步任务的支持,之前的 vimscript 只能以同步的方式执行任务;
  • 重构了 Vim 的部分代码,实现了多平台兼容,并可使用更加现代化的代码编译工具链;

但与此同时,NeoVim 项目的成功也反过来唤起了 Vim 项目组的危机意识,重新激发了他们的开发热情,促使 Vim 在 7.0 之后加快了新功能开发进度,很快发布了 Vim 8.0/8.1,把 NeoVim 实现的大部分新特性在 Vim 中也实现了一遍。Vim 现在也支持异步任务,内置终端等特性了。所以目前来看 NeoVim 与 Vim 的差异已经很小,大部分第三方插件都能兼容 NeoVim/vim。

安装与配置

本文将以 Ubuntu Linux 发行版为系统环境来研究 NeoVim 的安装与环境配置方法,并学习使用它的具体功能。

基础环境配置

因为在为 NeoVim 安装 coc.nvim 等插件时会需要用到 Node.js,所以在正式安装 NeoVim 之前,我们首先要在操作系统中安装一个 12.0.0 以上版本的 Node.js 运行时环境,它可以通过以下 Bash 命令序列来安装:

curl -fsSL https://deb.nodesource.com/setup_17.x | sudo -E bash -
sudo apt install -y nodejs

如果一切顺利,我们通过node -vnpm -v命令就可以查看到相应的版本,例如像这样:

$ node -v
v17.4.0
$ npm· -v
8.3.1

在这里,为了后续操作的顺利,我们需要将 NPM 所连接的默认仓库换成在国内的镜像:

$ npm config set registry https://registry.npm.taobao.org
$ npm config get registry
https://registry.npm.taobao.org

接着,我们需要安装 Python3 环境,它可以通过以下 Bash 命令序列来安装:

sudo apt install  -y  python3 python3-pip
pip install pynvim

最后,我们需要安装 curl 和 git,它们可以通过以下 Bash 命令序列来安装:

sudo apt install -y curl git

安装 NeoVim

在 Ubuntu Linux 中,我们可以直接通过 APT 包管理器来安装 NeoVim,其安装命令如下:

sudo apt install -y neovim

如果我们使用的是其他 Linux 发行版或者 Windows/macOS 等其他操作系统,也可以通过参考官方提供的帮助文档来进行相关的安装操作。总而言之,如果一切顺利,我们接下来就可以使用nvim -v命令来查看 NeoVim 的版本信息了,像这样:

$ nvim -v
NVIM v0.4.3
Build type: Release
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/cc -g -O2 -fdebug-prefix-map=/build/neovim-gOb7vg/neovim-0.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=1 -DDISABLE_LOG -Wdate-time -D_FORTIFY_SOURCE=1 -O2 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/build/neovim-gOb7vg/neovim-0.4.3/build/config -I/build/neovim-gOb7vg/neovim-0.4.3/src -I/usr/include -I/usr/include/lua5.1 -I/build/neovim-gOb7vg/neovim-0.4.3/build/src/nvim/auto -I/build/neovim-gOb7vg/neovim-0.4.3/build/include
Compiled by team+vim@tracker.debian.org Features: +acl +iconv +tui
See ":help feature-compile" system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/share/nvim" Run :checkhealth for more info

如果看到了与上述输出类似的版本信息,就说明 NeoVim 编辑器已经成功地安装到了我们的计算机中。

用户配置文件

接下来,我们要来创建的一个专属于用户个人的配置文件,以方便后面的个性化配置。为此,我们需要执行以下 bash 命令:

mkdir ~/.config/nvim/
nvim ~/.config/nvim/init.vim

并在打开的``文件中输入如下代码:

" 令编辑器显示行号
set nu

然后在 NeoVim 中执行:wq命令保存配置并退出,如果当我们再次进入 NeoVim 时能看到其显示了行号,就证明我们的用户配置文件完成了创建并成功生效了。

插件安装

插件安装方法

对于国内用户来说,在正式安装 NeoVim 编辑器的插件之前,最好先设置一下对raw.githubusercontent.com这个域名的本地 DNS 解析表,否则有时候会因不可控的网络因素而造成安装失败。具体做法是,先使用 IP 查询工具找到该域名对应的 IP 地址,然后将其写入到/etc/hosts文件中,像这样:

$ cat /etc/hosts
# [network]
# generateHosts = false
127.0.0.1 localhost
127.0.1.1 owlman.localdomain owlman
199.232.96.133 raw.githubusercontent.com # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

接下来,我们就可以开始为 NeoVim 编辑器安装插件了。首先需要安装的是 Vim-plug 插件管理器,它可以通过以下 Bash 命令来安装:

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

如果一切顺利,我们现在就可以在 NeoVim 编辑器中执行:PlugInstall命令来安装插件了。下面,我们就试着来安装一下可以按 tab 键进行补全的功能插件,其操作步骤如下:

  1. 重新打开并编辑init.vim文件,将其内容修改如下:

    " 令编辑器显示行号
    set nu " 要安装的插件列表
    call plug#begin('~/.vim/plugged')
    " tab键补全功能插件
    Plug 'ervandew/supertab'
    call plug#end()
  2. 在 NeoVim 中执行:wq命令保存配置并退出,然后重新进入 NeoVim 编辑器并在其命令模式下执行:PlugInstall命令,即可自动安装上述配置文件中列出的插件,待安装完成之后,我们再次重启 NeoVim 编辑器,并在编辑模式中按下 tab 键就会看到该插件提供的补全提示了。

常用插件推荐

Coc 插件

这是一个集成了代码补全、静态检测、函数跳转等功能的插件引擎,它允许用户根据自己使用的编程语言来安装相应的智能补全插件,其安装步骤如下:

  1. 由于 Coc.nvim 是基于 Node.js 的,所以我们首先要确定当前系统环境中已经安装了 Node.js 运行环境,并且其版本应该在 12.0.0 以上。

  2. 重新打开并编辑init.vim文件,将其内容修改如下:

    " 令编辑器显示行号
    set nu " 要安装的插件列表
    call plug#begin('~/.vim/plugged')
    " tab键补全功能插件
    Plug 'ervandew/supertab'
    " Coc 智能补全插件引擎
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    call plug#end()
  3. 在 NeoVim 中执行:wq命令保存配置并退出,然后重新进入 NeoVim 编辑器并在其命令模式下执行:PlugInstall命令,即可自动安装上述插件列表中新增的插件。待安装完成之后,我们再次重启 NeoVim 编辑器,就可以根据自己使用的编程语言来安装智能补全插件了。

  4. 由于 Coc 本身并不提供具体语言的补全功能,所以在安装完成后,我们需要安装具体的语言服务以支持对应的补全功能。例如想要配置 C++环境,我们就需要在 NeoVim 的命令模式下执行以下命令来安装相关的插件:

:CocInstall coc-clangd # C++环境插件
:CocInstall coc-cmake # Cmake 支持

在上述命令执行完成之后,我们可以试着用 NeoVim 打开一个.cpp文件,然后就会在编辑器的底部看到这样一段提示:

[coc.nvim] clangd was not found on your PATH. :CocCommand clangd.install will install 11.0.0.

这时候,我们可以继续在命令模式中输入:CocCommand clangd.instal命令来安装 clangd。然后,当我们再次重启 NeoVim 之后,编写 C++ 代码就会看到相关的智能补全提示了。当然了,我们可以执行以下命令来配置其他编程语言和工具的智能补全插件:

:CocInstall coc-git            # git 支持
:CocInstall coc-highlight # 高亮支持
:CocInstall coc-jedi # jedi
:CocInstall coc-json # json 文件支持
:CocInstall coc-python # python 环境支持
:CocInstall coc-sh # bash 环境支持
:CocInstall coc-snippets # python提供 snippets
:CocInstall coc-vimlsp # lsp
:CocInstall coc-yaml # yaml

vim-airline 插件

我们可以利用 vim-airline 插件及其主题插件来让 NeoVim 编辑器具有更赏心悦目的用户界面,其安装步骤如下:

  1. 重新打开并编辑init.vim文件,将其内容修改如下:

    " 令编辑器显示行号
    set nu " 要安装的插件列表
    call plug#begin('~/.vim/plugged')
    " tab键补全功能插件
    Plug 'ervandew/supertab'
    " Coc 智能补全插件引擎
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    " vim-airline 标签栏插件
    Plug 'Vim-airline/vim-airline'
    " vim-airline 标签栏插件的主题插件
    Plug 'Vim-airline/vim-airline-themes'
    call plug#end() " 配置 vim-airline 标签栏插件
    let g:airline#extensions#tabline#enabled = 1
  2. 在 NeoVim 中执行:wq命令保存配置并退出,然后重新进入 NeoVim 编辑器并在其命令模式下执行:PlugInstall命令,即可自动安装上述插件列表中新增的插件。待安装完成之后,只需要再次重启 NeoVim 编辑器,就可以看到如下用户界面了。

ranger 插件

该插件是一款非常好用的文件浏览器,其安装步骤如下:

  1. 先在 Ubuntu 系统环境中执行以下 bash 命令安装 ranger 组件:

    sudo apt install -y ranger
  2. 重新打开并编辑init.vim文件,将其内容修改如下:

    " 令编辑器显示行号
    set nu " 要安装的插件列表
    call plug#begin('~/.vim/plugged')
    " tab键补全功能插件
    Plug 'ervandew/supertab'
    " Coc 智能补全插件引擎
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    " vim-airline 标签栏插件
    Plug 'Vim-airline/vim-airline'
    " vim-airline 标签栏插件的主题插件
    Plug 'Vim-airline/vim-airline-themes'
    " ranger 文件浏览器
    Plug 'kevinhwang91/rnvimr'
    call plug#end() " 配置 vim-airline 标签栏插件
    let g:airline#extensions#tabline#enabled = 1
    " 配置 ranger 文件浏览器插件
    let g:rnvimr_ex_enable = 1
    " Alt+o 打开 ranger
    nnoremap <silent> <M-o> :RnvimrToggle<CR>
    "Alt+加号 切换至下一个标签,减号则是切换回上一个
    nnoremap <M-+> :bp<CR>
    nnoremap <M--> :bn<CR>
  3. 在 NeoVim 中执行:wq命令保存配置并退出,然后重新进入 NeoVim 编辑器并在其命令模式下执行:PlugInstall命令,即可自动安装上述插件列表中新增的插件。待安装完成之后,只需要再次重启 NeoVim 编辑器并按下快捷键 Alt+o,就可以看到如下用户界面了。

vim-startify 插件

该插件可用于快速打开最近编辑过的文件,其安装步骤如下:

  1. 重新打开并编辑init.vim文件,将其内容修改如下:

    " 令编辑器显示行号
    set nu " 要安装的插件列表
    call plug#begin('~/.vim/plugged')
    " tab键补全功能插件
    Plug 'ervandew/supertab'
    " Coc 智能补全插件引擎
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    " vim-airline 标签栏插件
    Plug 'Vim-airline/vim-airline'
    " vim-airline 标签栏插件的主题插件
    Plug 'Vim-airline/vim-airline-themes'
    " vim-startify 插件
    Plug 'mhinz/vim-startify'
    call plug#end() " 配置 vim-airline 标签栏插件
    let g:airline#extensions#tabline#enabled = 1
    let g:airline#extensions#tabline#enabled = 1
    " 配置 ranger 文件浏览器插件
    let g:rnvimr_ex_enable = 1
    " Alt+o 打开 ranger
    nnoremap <silent> <M-o> :RnvimrToggle<CR>
    "Alt+加号 切换至下一个标签,减号则是切换回上一个
    nnoremap <M-+> :bp<CR>
    nnoremap <M--> :bn<CR>
  2. 在 NeoVim 中执行:wq命令保存配置并退出,然后重新进入 NeoVim 编辑器并在其命令模式下执行:PlugInstall命令,即可自动安装上述插件列表中新增的插件。待安装完成之后,只需要再次重启 NeoVim 编辑器,就可以看到最近编辑过的文件了,如下图所示。

vim-snazzy 主题插件

该插件可用于进一步美化编辑器的用户界面,其安装步骤如下:

  1. 重新打开并编辑init.vim文件,将其内容修改如下:

    " 令编辑器显示行号
    set nu " 要安装的插件列表
    call plug#begin('~/.vim/plugged')
    " tab键补全功能插件
    Plug 'ervandew/supertab'
    " Coc 智能补全插件引擎
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    " vim-airline 标签栏插件
    Plug 'Vim-airline/vim-airline'
    " vim-airline 标签栏插件的主题插件
    Plug 'Vim-airline/vim-airline-themes'
    " vim-startify 插件
    Plug 'mhinz/vim-startify'
    " vim-snazzy 主题插件
    Plug 'connorholyday/vim-snazzy'
    call plug#end() " 配置 vim-airline 标签栏插件
    let g:airline#extensions#tabline#enabled = 1
    let g:airline#extensions#tabline#enabled = 1
    " 配置 ranger 文件浏览器插件
    let g:rnvimr_ex_enable = 1
    " Alt+o 打开 ranger
    nnoremap <silent> <M-o> :RnvimrToggle<CR>
    "Alt+加号 切换至下一个标签,减号则是切换回上一个
    nnoremap <M-+> :bp<CR>
    nnoremap <M--> :bn<CR>
    " 配置 vim-snazzy 主题插件
    colorscheme snazzy
    let g:SnazzyTransparent = 1
  2. 在 NeoVim 中执行:wq命令保存配置并退出,然后重新进入 NeoVim 编辑器并在其命令模式下执行:PlugInstall命令,即可自动安装上述插件列表中新增的插件。待安装完成之后,只需要再次重启 NeoVim 编辑器,就可以看到如下用户界面。

markdown-preview 插件

该插件可用于预览 markdown 文档,其安装步骤如下:

  1. 重新打开并编辑init.vim文件,将其内容修改如下:

     " 令编辑器显示行号
    set nu " 要安装的插件列表
    call plug#begin('~/.vim/plugged')
    " tab键补全功能插件
    Plug 'ervandew/supertab'
    " Coc 智能补全插件引擎
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    " vim-airline 标签栏插件
    Plug 'Vim-airline/vim-airline'
    " vim-airline 标签栏插件的主题插件
    Plug 'Vim-airline/vim-airline-themes'
    " vim-startify 插件
    Plug 'mhinz/vim-startify'
    " vim-snazzy 主题插件
    Plug 'connorholyday/vim-snazzy'
    " markdown 预览插件
    Plug 'iamcco/markdown-preview.nvim'
    call plug#end() " 配置 vim-airline 标签栏插件
    let g:airline#extensions#tabline#enabled = 1
    let g:airline#extensions#tabline#enabled = 1
    " 配置 ranger 文件浏览器插件
    let g:rnvimr_ex_enable = 1
    " Alt+o 打开 ranger
    nnoremap <silent> <M-o> :RnvimrToggle<CR>
    "Alt+加号 切换至下一个标签,减号则是切换回上一个
    nnoremap <M-+> :bp<CR>
    nnoremap <M--> :bn<CR>
    " 配置 vim-snazzy 主题插件
    colorscheme snazzy
    let g:SnazzyTransparent = 1
    " 指定浏览器路径
    let g:mkdp_path_to_chrome = "<此处填写chrome的安装路径>"
    " 指定预览主题,默认Github
    let g:mkdp_markdown_css=''
  2. 在 NeoVim 中执行:wq命令保存配置并退出,然后重新进入 NeoVim 编辑器并在其命令模式下执行:PlugInstall命令,即可自动安装上述插件列表中新增的插件。待安装完成之后,只需要再次重启 NeoVim 编辑器,并在其命令模式下执行:call mkdp#util#install()命令,然后就可以通过:MarkdownPreview命令来启动预览,然后用:MarkdownPreviewStop命令来关闭预览了。

NeoVim 学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 四种OS网络属性配置

    1.Windows BAT设置网络属性: netsh interface ip set address "Ethernet" static 192.168.31.223 255.2 ...

  2. Flink基本概念及架构

    1.基本概念 无界和有界数据.任何类型的数据都可以形成一种事件流.信用卡交易.传感器测量.机器日志.网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流.数据可以被作为 无界 或者 有界 流来 ...

  3. 使用Docusaurus搭建个人网站

    第一次使用 Docusaurus 搭建我的个人网站 第一步 安装 node 环境 安装 Node.js 16.14 或更高版本(可以通过执行 node -v 命令来查看当前所用的 Node.js 版本 ...

  4. CoordConv:给你的卷积加上坐标

    摘要:本文主要对CoordConv的理论进行了介绍,对其进行了复现,并展示了其在网络结构中的用法. 本文分享自华为云社区<CoordConv:给你的卷积加上坐标>,作者: 李长安. 一.理 ...

  5. Python爬虫基础教程2

    beautifulsoup4介绍/遍历文档树 bs4 > 从html或xml文件中提取的python库 用它来解析爬取回来的xml 安装:pip install beautifulsoup4 p ...

  6. mapState, mapActions

    <template> <div class="box"> <header class="header">分类头部</h ...

  7. [Linux]常用命令之【hostname】

    1: 个人的片面理解: hostname是主机名(的"昵称"),而非域名.一般设置hostname,来标识当前机器的主要用途.以区别与其它机器 2: hostname的严格定义: ...

  8. [Linux]U盘启动盘安装CentOS7系统(LiveGNOME版)

    1 准备:工具 U盘 容量:视CentOS具体版本需要而定.推荐4G+ UltraISO(软碟通) ISO制作工具 / U盘启动盘刻录工具 2 制作:U盘启动盘 step1 下载CentOS镜像 Ce ...

  9. 0001 嵌入式开发带你从小白到大佬系列之——Linux开发环境搭建—Windows-VMware-Ubuntu环境配置

    如文章标题,我们安装的Linux开发环境是:Windows-VMware-Ubuntu环境 配置,即在windows系统下安装VMware虚拟机,之后在VMware中配置安装Linux系统的常用发行版 ...

  10. 解决svn本身上传没有权限和配置自动更新的钩子

    第一步 :建立你的web程序目录和版本库目录 mkdir /data/webwww/project1 svnadmin create /data/svnwww/project1 进入/data/web ...