aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rwxr-xr-xdocs/Nvim_setup.sh154
-rw-r--r--docs/README.md176
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.