Rust + NVIM 설정

mohadang·2023년 9월 2일
0

Rust

목록 보기
30/30
post-thumbnail

NVIM 최신 버전 설치

설치

$ 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

NVIM 을 vim 명령으로 설정

$ alias vim='nvim.appimage'

NVIM 설정 초기화

NVIM 설치 과정중 문제 발생시 NVIM 캐쉬 파일 제거 후 시도

$ rm -rf ~/.local/share
$ rm -rf ~/.config/nvim/

FUSE 관련 문제 발생시

$ sudo add-apt-repository universe
$ sudo apt install libfuse2

Link : https://github.com/AppImage/AppImageKit/wiki/FUSE

NvChad 설치

NvChad : 복잡하고 다양한 NVIM의 설정과 다른 플러그인을 조합하여 사용 편리성을 제공하는 플러그인.

NvChad를 설치하면 mason, vimtree, telescope등 다양한 플러그인을 미리 설치 해준다.

$ git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1
$ nvim

초기 설정 파일 질문시 N

NVIM 폰트 설정(NVimTree 아이콘)

WSL을 사용할 경우 우분투에 폰트를 설치하는 것이 아니라 윈도우에 폰트를 설치한 후 터미널에서 해당 폰드를 적용해주어야 한다.
NVimTree가 폴터, 파일 아이콘 표시를 원한다면 이런 아이콘을 지원하는 폰트롤 설정해야 한다

Nerd Font : 개발자 친화적 폰트들을 다운로드 받을 수 있는 사이트.

JetBrain mono 폰트 : Nerd Font에서 다운로드 받을 수 있음.

NVIM 기본 명령어

자동 완성 : tab, 명령 입력 모드(:)에서도 tab 가능

NvChad 기본 명령어

테마('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(파일 탐색)

NvimTree 열기/닫기 : ctrl + n
NvimTree 포커스 : space -> e
파일 선택 : 라인 이동 + Enter
파일 추가 : a
파일 복사 : c -> p
파일 이름 변경 : r
파일 삭제 : d
파일 정보 : ctrl + k
디렉터리 접음 : backspace

NvChad 윈도우

윈도우 분할 : : + sp, vsp
윈도우 선택 : ctrl + h,j,k,l
윈도우 라인 넘버 : space + n, (r + n), 'r'elative

  • set nu 보다 가시성 좋음

탭 이동 : tab, shift + tab
탭 종료 : space + x

vim

화면 위/아래 끝 : ctrl + h/l

NvChad theme

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 플러그인을 추가 하는 방법은 하나의 스탠드한 방법이 있지 않고 다양한 방법이 있다. 각 방법마다 생성하는 파일이나 설정하는 값도 다르다.

그러나 다양한 방법들 사이에서도 일련의 패턴은 있다.

  • 설정 파일 생성/수정한 후 NVIM을 재실행 하면 NVIM 플러그인이 자동으로 플러그인을 다운로드 받아 추가한다.
  • 주로 lua/custom/plugins.lua 파일을 커스텀 파일로 사용한다.

nvim.Mason을 이용한 플러그인 설치

nvim.Mason은 플러그인 설치를 도와주는 플러그인이다.

chardrc.lua에 커스텀 파일 지정.

plugins.lua파일 추가 후 원하는 플러그인 플러그인 관련 설정을 추가. 아래 그림에서는 mason으로 rust-analyzer를 설치 한다.

nvim 재실행 하면 자동으로 nvim.Mason이 설치된다.

:MsonInstallAll 명령으로 mason이 플러그인을 다운로드 받아 추가하도록 실행한다.

:Mason 명령을 입력함녀 Mason 설정 화면을 볼 수 있다

플러그인 분류

  • LSP(Language Server Protocol) : 서버와 통신하여 코드 자동 완성.
  • DAP(Debug Adapter Protocol) : 디버그.
  • Linter : 코드의 오류, 버그, 경고, 스타일 문제 표시.
  • Formatter : 코딩의 스타일 가이드.

nvim + rust analyzer 설정

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-tools는 Rust 코드 자동 완성, 디버깅 관련 다양한 기능을 제공한다. 대신 rust-tools가 기능을 수행할때 의존하는 플러그인들이 있어 같이 설치 해주어야 한다.

아래 그림과 같이 파일 추가/설정.

  • plugins.lua
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
  • 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"
  • rust-tools.lua
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

Debug

:RustDebuggables

:DapToggleBreakpoint

참고

profile
mohadang

0개의 댓글