설치
$ curl -LO $ https://github.com/neovim/neovim/releases/latest/download/nvim.appimage
$ chmod u+x nvim.appimage
$ ./nvim.appimage
$ sudo mv nvim.appimage /usr/bin/nvim.appimage
문제 발생시
$ ./nvim.appimage --appimage-extract
$ ./squashfs-root/AppRun --version
# Optional: exposing nvim globally.
$ sudo mv squashfs-root /
$ sudo ln -s /squashfs-root/AppRun /usr/bin/nvim
$ nvim
Link : https://github.com/neovim/neovim/wiki/Installing-Neovim
$ alias vim='nvim.appimage'
NVIM 설치 과정중 문제 발생시 NVIM 캐쉬 파일 제거 후 시도
$ rm -rf ~/.local/share
$ rm -rf ~/.config/nvim/
$ sudo add-apt-repository universe
$ sudo apt install libfuse2
Link : https://github.com/AppImage/AppImageKit/wiki/FUSE
NvChad : 복잡하고 다양한 NVIM의 설정과 다른 플러그인을 조합하여 사용 편리성을 제공하는 플러그인.
NvChad를 설치하면 mason, vimtree, telescope등 다양한 플러그인을 미리 설치 해준다.
$ git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1
$ nvim
초기 설정 파일 질문시 N
WSL을 사용할 경우 우분투에 폰트를 설치하는 것이 아니라 윈도우에 폰트를 설치한 후 터미널에서 해당 폰드를 적용해주어야 한다.
NVimTree가 폴터, 파일 아이콘 표시를 원한다면 이런 아이콘을 지원하는 폰트롤 설정해야 한다
Nerd Font : 개발자 친화적 폰트들을 다운로드 받을 수 있는 사이트.
JetBrain mono 폰트 : Nerd Font에서 다운로드 받을 수 있음.
자동 완성 : tab
, 명령 입력 모드(:)에서도 tab 가능
테마('th'eme) 변경 : space -> t -> h
모든 탐색('f'ind 'a'll) : space -> f -> a
파일 탐색('f'ind 'f'iles) : space -> f -> f
버퍼(탭) 파일 탐색('f'ind 'b'uffers) : space -> f -> b
터미널('h'orizontal 'v'ertical) : space -> h, v
주석 : v로 코드 블록 + (space + /), (g + c)
현재 스코프 주석 : g + b + b
치트시트('ch'eat sheet) : space -> c -> h
, leadkey : space
정의 이동 : g + d/D
, ctrl + ]
NvimTree 열기/닫기 : ctrl + n
NvimTree 포커스 : space -> e
파일 선택 : 라인 이동 + Enter
파일 추가 : a
파일 복사 : c -> p
파일 이름 변경 : r
파일 삭제 : d
파일 정보 : ctrl + k
디렉터리 접음 : backspace
윈도우 분할 : : + sp, vsp
윈도우 선택 : ctrl + h,j,k,l
윈도우 라인 넘버 : space + n, (r + n)
, 'r'elative
탭 이동 : tab, shift + tab
탭 종료 : space + x
화면 위/아래 끝 : ctrl + h/l
gatekeeper 추천
NvChad 설정 파일(chadrc.lua)
$ ls ~/.config/nvim/lua/custom/
chadrc.lua
NVIM 설정 파일(init.lua)
$ ls ~/.config/nvim
LICENSE init.lua lazy-lock.json lua
NVIM 플러그인을 추가 하는 방법은 하나의 스탠드한 방법이 있지 않고 다양한 방법이 있다. 각 방법마다 생성하는 파일이나 설정하는 값도 다르다.
그러나 다양한 방법들 사이에서도 일련의 패턴은 있다.
nvim.Mason은 플러그인 설치를 도와주는 플러그인이다.
chardrc.lua에 커스텀 파일 지정.
plugins.lua파일 추가 후 원하는 플러그인 플러그인 관련 설정을 추가. 아래 그림에서는 mason으로 rust-analyzer를 설치 한다.
nvim 재실행 하면 자동으로 nvim.Mason이 설치된다.
:MsonInstallAll
명령으로 mason이 플러그인을 다운로드 받아 추가하도록 실행한다.
:Mason
명령을 입력함녀 Mason 설정 화면을 볼 수 있다
플러그인 분류
lua/custom/chadrc.lua
---@type ChadrcConfig
local M = {}
M.ui = { theme = 'bearded-arc' }
M.plugins = 'custom.plugins' <-- 추가
return M
lua/custom/plugins.lua
local plugins = {
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"rust-analyzer",
},
},
},
{
"neovim/nvim-lspconfig",
config = function()
require "plugins.configs.lspconfig"
require "custom.configs.lspconfig"
end,
},
}
return plugins
lua/custom/configs/lspconfig.lua
local on_attach = require("plugins.configs.lspconfig").on_attach
local capabilities = require("plugins.configs.lspconfig").capabilities
local lspconfig = require("lspconfig")
local util = require "lspconfig/util"
lspconfig.rust_analyzer.setup({
on_attach = on_attach,
capabilities = capabilities,
filetypes = {
"rust"
},
root_dir = util.root_pattern("Cargo.toml"),
settings = {
['rust-analyzer'] = {
cargo = {
allFeatures = true,
}
}
}
})
rust-tools는 Rust 코드 자동 완성, 디버깅 관련 다양한 기능을 제공한다. 대신 rust-tools가 기능을 수행할때 의존하는 플러그인들이 있어 같이 설치 해주어야 한다.
아래 그림과 같이 파일 추가/설정.
local cmp = require "cmp"
local plugins = {
{
"neovim/nvim-lspconfig",
config = function()
require "plugins.configs.lspconfig"
require "custom.configs.lspconfig"
end,
},
{
"simrat39/rust-tools.nvim",
ft = "rust",
dependencies = "neovim/nvim-lspconfig",
opts = function ()
return require "custom.configs.rust-tools"
end,
config = function(_, opts)
require('rust-tools').setup(opts)
end
},
{
"mfussenegger/nvim-dap",
},
}
return plugins
local on_attach = require("plugins.configs.lspconfig").on_attach
local capabilities = require("plugins.configs.lspconfig").capabilities
local lspconfig = require("lspconfig")
local util = require "lspconfig/util"
local on_attach = require("plugins.configs.lspconfig").on_attach
local capabilities = require("plugins.configs.lspconfig").capabilities
local options = {
server = {
on_attach = on_attach,
capabilities = capabilities,
}
}
return options
:RustDebuggables
:DapToggleBreakpoint
NvChad 정리 감사합니다.
잘 이용하겠습니다 :)