diff --git a/README.md b/README.md index 8350d34..b8e0cbc 100644 --- a/README.md +++ b/README.md @@ -10,200 +10,36 @@ the additional config file for GUI client of Neovim (I am using [neovim-qt](https://github.com/equalsraf/neovim-qt) for now on Windows). My configurations are heavily documented to make it as clear as possible. While -you can download the whole configuration and replace yours, it is not -recommended to do so. Good configurations are personal. Everyone should have -his or her unique configuration. You are encouraged to copy from this -configuration the part you feel useful and add it to your own configuration. +you can download the whole repository and use it, it is not recommended to do +so. Good configurations are personal. Everyone should have his or her unique +config file. You are encouraged to copy from this this repo the part you feel +useful and add it to your own Nvim config. -See [this wiki page](https://github.com/jdhao/nvim-config/wiki/Nvim-setup-in-Linux) on -how to install Nvim dependencies as well as nvim on Linux environment. +See [doc here](docs/README.md) on how to install Nvim's dependencies, Nvim +itself and the configuration on different platforms (Linux, MacOS and Windows). ## Features ## + Auto-completion for Python via [Deoplete](https://github.com/Shougo/deoplete.nvim). + Source code linting via [Neomake](https://github.com/neomake/neomake). ++ Code formatting via [Neoformat](https://github.com/sbdchd/neoformat). ++ Markdown writing and syntax highlighting via [vim-markdown](https://github.com/plasticboy/vim-markdown) and [vim-pandoc-syntax](https://github.com/vim-pandoc/vim-pandoc-syntax). ++ LaTeX editing via [vimtex](https://github.com/lervag/vimtex). ++ Git integration via [vim-fugitive](https://github.com/tpope/vim-fugitive). ++ Fast buffer jump via [vim-sneak](https://github.com/justinmk/vim-sneak). ++ Open a file in current project quickly via [LeaderF](https://github.com/Yggdroot/LeaderF). + Beautiful status line via [vim-airline](https://github.com/vim-airline/vim-airline). + Powerful sidebar via [Nerdtree](https://github.com/scrooloose/nerdtree). + Tags navigation via [tagbar](https://github.com/majutsushi/tagbar). -+ Fast buffer jump via [vim-sneak](https://github.com/justinmk/vim-sneak). -+ Open a file in current project quickly via [LeaderF](https://github.com/Yggdroot/LeaderF). + ...... -# Pre-requisite - -There are a few requirements if you want to use Neovim for efficient editing. - -## Python - -To use auto-completion and other features, you must install Python 3. The -easiest way to install Python 3 is via -[Anaconda](https://www.anaconda.com/distribution/#download-section). Make sure -that the output of `python --version` shows that Python 3.x is installed. - -## Pynvim - -Neovim relies on [pynvim](https://github.com/neovim/pynvim) to communicate with -plugins which utilizes its Python binding. Pynvim is required by plugin such as -Deoplete. - -## Jedi - -For Python code auto-completion to work, you need to install -[Jedi](https://github.com/davidhalter/jedi): - -``` -pip install jedi -``` - -## Git - -Git is used by plugin manager vim-plug to download plugins from GitHub or -other Git repositories. - -Since Git is usually pre-installed on Linux and Mac, you do not need to worry -if you are on these two platforms. For Windows, install [Git for -Windows](https://git-scm.com/download/win) and make sure you can call `git` -from the command line. - -## ctags - -In order to use tags related plugins such as -[tagbar](/github.com/majutsushi/tagbar) and -[gutentags](https://github.com/ludovicchabant/vim-gutentags), you need to -install a ctags distribution. Universal ctags is preferred. - -To install ctags on Mac, [use Homebrew](https://github.com/universal-ctags/homebrew-universal-ctags). -To install it Windows, [use chocolatey](https://chocolatey.org/packages/universal-ctags): - -``` -choco install universal-ctags -``` - -To install it on Linux, you need to build it yourself. See -[here](https://askubuntu.com/questions/796408/installing-and-using-universal-ctags-instead-of-exuberant-ctags/836521#836521). - -Set its PATH properly and make sure you can call `ctags` from command line. - -## Ripgrep - -Ripgrep is fast grep tool available for both Linux, Windows and Mac. It is used -by several searching plugins. - -For Windows and Mac, you can install it via chocolatey and homebrew. For Linux, -you can download from its [release -page](https://github.com/BurntSushi/ripgrep/releases) and install it. - -## Linters - -A linter is a tool to check your code for possible issues or errors. Based on -your programming languages, you may need to install various linters. - -+ Python: [pylint](https://github.com/PyCQA/pylint) and - [flake8](https://github.com/PyCQA/flake8). -+ Vim script: [vint](https://github.com/Kuniwak/vint) (You may need to install - the pre-release versions because of [this issue](https://github.com/Kuniwak/vint/issues/290)). - -For other linters, please consult the plugin documentation. For Neomake (which -is the linting plugin I currently use), a list of makers (i.e., linters) for -different languages is listed -[here](https://github.com/neomake/neomake/wiki/Makers). - -## Terminal emulators - -Which [terminal emulator](https://en.wikipedia.org/wiki/Terminal_emulator) you -are using greatly affects the appearance and functionalities of Neovim. Since -Neovim supports true colors, terminals which support true colors are -recommended. For a list of terminals which support true colors, see -[here](https://github.com/termstandard/colors). - -For Mac, you can use [iterm2](https://www.iterm2.com/). If you connect to Linux -server on Windows, I recommend [wsltty](https://github.com/mintty/wsltty) and -[Cygwin](https://www.cygwin.com/), both of them use -[mintty](https://github.com/mintty/mintty) as the terminal emulator. - -## Font - -Since Vim-airline uses several symbols not available in normal font, you need -to install [fonts here](https://github.com/powerline/fonts) to make vim-airline -look pretty. I am using -[Hack](https://github.com/powerline/fonts/tree/master/Hack), and it looks -great. - -# How to Install Neovim - -There are various ways to install Neovim based on your system. - -## Linux - -Follow the official guide and download the appimage from the [release -page](https://github.com/neovim/neovim/releases/nightly). - -For some Linux systems, you may not be able to run the appimage. You can -directly download the tar ball from -[here](https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz) -and extract it to run Neovim. - -## Windows - -The easiest way to install Neovim on Windows is via -[chocolatey](https://chocolatey.org/install). First, install chocolatey. Then -you can install neovim easily with - -``` -# install latest version of neovim -# choco install neovim --pre - -choco install neovim -``` - -The Neovim that chocolatey installs may not the latest version. To keep -up-to-date with the latest features of Neovim, you may download the latest -release from GitHub and manually extract it. - -## Mac - -It is recommended to install neovim via [Homebrew](https://brew.sh/) on MacOS. -Simply run the following command: - -``` -brew install neovim -# If you want to install latest version of neovim, use the following command -# instead. -# brew install --HEAD neovim -``` - -After installing Neovim, you may need to add the directory where the Neovim -executable (`nvim` on Linux and Mac, `nvim.exe` on Windows) resides to your -system `PATH`. - -Make sure that you can call `nvim` from the command line after all these setup. - -# Nvim settings - -# How to install this configuration - -On Windows, the config directory is `$HOME/AppData/Local/nvim`[^1]. On Linux -and Mac, the directory is `~/.config/nvim`. First, you need to remove all the -files under the config directory (including dot files), then use the following -command to install this configuration: - -``` -git clone https://github.com/jdhao/nvim-config.git . -``` - -After that, when you first open nvim, all the plugins included in this -configuration will be installed automatically for you. Since I use quite a lot -of plugins (around 60 plugins), it may take some time to install all of them, -depending on your network connection speed. - # Trouble shooting If you come across an issue, you can first use `:checkhealth` command provided by `nvim` to trouble-shoot yourself. Please read carefully the messages provided by health check. -If you still have an issue, you may -[open a new issue](https://github.com/jdhao/nvim-config/issues). +If you still have an issue, you may [open a new issue](https://github.com/jdhao/nvim-config/issues). # Further readings diff --git a/docs/Nvim_setup.sh b/docs/Nvim_setup.sh new file mode 100755 index 0000000..b3b1b81 --- /dev/null +++ b/docs/Nvim_setup.sh @@ -0,0 +1,154 @@ +#!/bin/bash +set -exu +set -o pipefail + +# Whether to python has been installed +PYTHON_INSTALLED=false + +# If Python has been installed, then we need to know whether Python is provided +# by the system, or you have already installed Python under your HOME. +SYSTEM_PYTHON=true + +# Whether to add the path of the installed executables to system PATH +ADD_TO_SYSTEM_PATH=false + +####################################################################### +# Anaconda or miniconda install # +####################################################################### + +if [[ ! "$PYTHON_INSTALLED" = true ]]; then + echo "Installing Python in user HOME" + + SYSTEM_PYTHON=false + + # Whether to install Anaconda (INSTALL_ANACONDA=true) or Miniconda (INSTALL_ANACONDA=false) + INSTALL_ANACONDA=false + if [[ "$INSTALL_ANACONDA" = true ]]; then + CONDA_DIR=$HOME/tools/anaconda + CONDA_NAME=Anaconda.sh + CONDA_LINK="https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh" + else + CONDA_DIR=$HOME/tools/miniconda + CONDA_NAME=Miniconda.sh + CONDA_LINK="https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh" + fi + + echo "Downloading and installing conda" + + if [[ ! -f "$HOME/packages/$CONDA_NAME" ]]; then + curl -Lo "$HOME/packages/$CONDA_NAME" $CONDA_LINK + fi + + # Install conda silently + if [[ -d $CONDA_DIR ]]; then + rm -rf "$CONDA_DIR" + fi + bash "$HOME/packages/$CONDA_NAME" -b -p "$CONDA_DIR" + + # Setting up environment variables + if [[ "$ADD_TO_SYSTEM_PATH" = true ]]; then + echo "export PATH=$CONDA_DIR/bin:$PATH" >> "$HOME/.bash_profile" + fi +fi + +# Install some Python packages +echo "Install pynvim, pylint flake8, jedi" + +if [[ "$SYSTEM_PYTHON" = true ]]; then + echo "Using system Python" + + # If we use system Python, we need to install these Python packages under user HOME, + # since we do not have permission to install them under system directories. + pip install --user pynvim pylint jedi flake8 black +else + echo "Using custom Python" + pip install pynvim pylint jedi flake8 black +fi + + +####################################################################### +# Ripgrep part # +####################################################################### + +echo "Install ripgrep" +RIPGREP_DIR=$HOME/tools/ripgrep +RIPGREP_SRC_NAME=$HOME/packages/ripgrep.tar.gz +RIPGREP_LINK="https://github.com/BurntSushi/ripgrep/releases/download/11.0.2/ripgrep-11.0.2-x86_64-unknown-linux-musl.tar.gz" + +if [[ ! -f $RIPGREP_SRC_NAME ]]; then + echo "Downloading ripgrep and renaming" + wget $RIPGREP_LINK -O "$RIPGREP_SRC_NAME" +fi + +if [[ ! -d "$RIPGREP_DIR" ]]; then + echo "Creating ripgrep directory under tools directory" + mkdir -p "$RIPGREP_DIR" +fi + +echo "Extracting to $HOME/tools/ripgrep directory" +tar zxvf "$RIPGREP_SRC_NAME" -C "$RIPGREP_DIR" --strip-components 1 + +if [[ "$ADD_TO_SYSTEM_PATH" = true ]]; then + echo "export PATH=$RIPGREP_DIR:$PATH" >> "$HOME/.bash_profile" +fi + +####################################################################### +# Ctags install # +####################################################################### + +echo "Install ctags" +CTAGS_SRC_DIR=$HOME/packages/ctags +CTAGS_DIR=$HOME/tools/ctags +CTAGS_LINK="https://github.com/universal-ctags/ctags.git" + +if [[ ! -d $CTAGS_SRC_DIR ]]; then + mkdir -p "$CTAGS_SRC_DIR" +fi + +cd "$CTAGS_SRC_DIR" +git clone $CTAGS_LINK . +./autogen.sh && ./configure --prefix="$CTAGS_DIR" +make -j && make install + +if [[ "$ADD_TO_SYSTEM_PATH" = true ]]; then + echo "export PATH=$CTAGS_DIR/bin:$PATH" >> "$HOME/.bash_profile" +fi + +####################################################################### +# Nvim install # +####################################################################### + +echo "Installing Neovim" +echo "Creating nvim directory under tools directory" +NVIM_DIR=$HOME/tools/nvim +NVIM_SRC_NAME=$HOME/packages/nvim-linux64.tar.gz +NVIM_CONFIG_DIR=$HOME/.config/nvim +NVIM_LINK="https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz" + +if [[ ! -d "$NVIM_DIR" ]]; then + mkdir -p "$NVIM_DIR" +fi + +echo "Downloading Neovim" +if [[ ! -f $NVIM_SRC_NAME ]]; then + wget "$NVIM_LINK" -O "$NVIM_SRC_NAME" +fi + +echo "Extracting neovim" +tar zxvf "$NVIM_SRC_NAME" --strip-components 1 -C "$NVIM_DIR" + +echo "Setting up config and installing plugins" +git clone https://github.com/jdhao/nvim-config.git "$NVIM_CONFIG_DIR" \ + && "$NVIM_DIR/bin/nvim" +PlugInstall +qall + +if [[ "$ADD_TO_SYSTEM_PATH" = true ]]; then + echo "export PATH=$NVIM_DIR/bin:$PATH" >> "$HOME/.bash_profile" +fi + + +####################################################################### +# Post processing # +####################################################################### +# Let PATH changes take effect +# shellcheck source=/dev/null +source "$HOME/.bash_profile" diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..f91129e --- /dev/null +++ b/docs/README.md @@ -0,0 +1,176 @@ +# Pre-requisite + +There are a few requirements if you want to use Neovim for efficient editing +and development work. + +## Python + +To use auto-completion and other features, you must install Python 3. The +easiest way to install Python 3 is via +[Anaconda](https://www.anaconda.com/distribution/#download-section). Make sure +that the output of `python --version` shows that Python 3.x is installed. + +## Pynvim + +Neovim relies on [pynvim](https://github.com/neovim/pynvim) to communicate with +plugins which utilizes its Python binding. Pynvim is required by plugin such as +Deoplete. + +## Jedi + +For Python code auto-completion to work, you need to install +[Jedi](https://github.com/davidhalter/jedi): + +``` +pip install jedi +``` + +## Git + +Git is used by plugin manager vim-plug to download plugins from GitHub or +other Git repositories. + +Since Git is usually pre-installed on Linux and Mac, you do not need to worry +if you are on these two platforms. For Windows, install [Git for +Windows](https://git-scm.com/download/win) and make sure you can call `git` +from the command line. + +## ctags + +In order to use tags related plugins such as +[tagbar](/github.com/majutsushi/tagbar) and +[gutentags](https://github.com/ludovicchabant/vim-gutentags), you need to +install a ctags distribution. Universal ctags is preferred. + +To install ctags on Mac, [use Homebrew](https://github.com/universal-ctags/homebrew-universal-ctags). +To install it Windows, [use chocolatey](https://chocolatey.org/packages/universal-ctags): + +``` +choco install universal-ctags +``` + +To install it on Linux, you need to build it yourself. See +[here](https://askubuntu.com/questions/796408/installing-and-using-universal-ctags-instead-of-exuberant-ctags/836521#836521). + +Set its PATH properly and make sure you can call `ctags` from command line. + +## Ripgrep + +Ripgrep is fast grep tool available for both Linux, Windows and Mac. It is used +by several searching plugins. + +For Windows and Mac, you can install it via chocolatey and homebrew. For Linux, +you can download from its [release +page](https://github.com/BurntSushi/ripgrep/releases) and install it. + +## Linters + +A linter is a tool to check your code for possible issues or errors. Based on +your programming languages, you may need to install various linters. + ++ Python: [pylint](https://github.com/PyCQA/pylint) and + [flake8](https://github.com/PyCQA/flake8). ++ Vim script: [vint](https://github.com/Kuniwak/vint) (You may need to install + the pre-release versions because of [this issue](https://github.com/Kuniwak/vint/issues/290)). + +For other linters, please consult the plugin documentation. For Neomake (which +is the linting plugin I currently use), a list of makers (i.e., linters) for +different languages is listed +[here](https://github.com/neomake/neomake/wiki/Makers). + +## Terminal emulators + +Which [terminal emulator](https://en.wikipedia.org/wiki/Terminal_emulator) you +are using greatly affects the appearance and functionalities of Neovim. Since +Neovim supports true colors, terminals which support true colors are +recommended. For a list of terminals which support true colors, see +[here](https://github.com/termstandard/colors). + +For Mac, you can use [iterm2](https://www.iterm2.com/). If you connect to Linux +server on Windows, I recommend [wsltty](https://github.com/mintty/wsltty) and +[Cygwin](https://www.cygwin.com/), both of them use +[mintty](https://github.com/mintty/mintty) as the terminal emulator. + +## Font + +Since Vim-airline uses several symbols not available in normal font, you need +to install [fonts here](https://github.com/powerline/fonts) to make vim-airline +look pretty. I am using +[Hack](https://github.com/powerline/fonts/tree/master/Hack), and it looks +great. + +# How to Install Neovim + +There are various ways to install Neovim based on your system. + +## Linux + +Follow the official guide and download the appimage from the [release +page](https://github.com/neovim/neovim/releases/nightly). + +For some Linux systems, you may not be able to run the appimage. You can +directly download the tar ball from +[here](https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz) +and extract it to run Neovim. + +## Windows + +The easiest way to install Neovim on Windows is via +[chocolatey](https://chocolatey.org/install). First, install chocolatey. Then +you can install neovim easily with + +``` +# install latest version of neovim +# choco install neovim --pre + +choco install neovim +``` + +The Neovim that chocolatey installs may not the latest version. To keep +up-to-date with the latest features of Neovim, you may download the latest +release from GitHub and manually extract it. + +## Mac + +It is recommended to install neovim via [Homebrew](https://brew.sh/) on MacOS. +Simply run the following command: + +``` +brew install neovim +# If you want to install latest version of neovim, use the following command +# instead. +# brew install --HEAD neovim +``` + +After installing Neovim, you may need to add the directory where the Neovim +executable (`nvim` on Linux and Mac, `nvim.exe` on Windows) resides to your +system `PATH`. + +Make sure that you can call `nvim` from the command line after all these setup. + +# Setting up Nvim + +## How to install this configuration + +On Windows, the config directory is `$HOME/AppData/Local/nvim`[^1]. On Linux +and Mac, the directory is `~/.config/nvim`. First, you need to remove all the +files under the config directory (including dot files), then use the following +command to install this configuration: + +``` +git clone https://github.com/jdhao/nvim-config.git . +``` + +After that, when you first open nvim, all the plugins included in this +configuration will be installed automatically for you. Since I use quite a lot +of plugins (around 60 plugins), it may take some time to install all of them, +depending on your network connection speed. + +# Automatic Installation # + +To set up a workable Neovim environment in Linux, I use the script +[`Nvim_setup.sh`](Nvim_setup.sh) to automatically install necessary +dependencies, Neovim itself and Nvim configs in this repo. + +Note that the variable `PYTHON_INSTALLED`, `SYSTEM_PYTHON` and +`ADD_TO_SYSTEM_PATH` should be set properly based on your situation.