diff options
Diffstat (limited to 'docs')
| -rwxr-xr-x | docs/Nvim_setup.sh | 154 | ||||
| -rw-r--r-- | docs/README.md | 176 |
2 files changed, 330 insertions, 0 deletions
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. |
