NeoVim 설치 & 사용 방법
개발환경 설정 - NeoVim
NeoVim 설치
macOS (apple silicon)
$ brew install neovim
Ubuntu
sudo apt install neovim
configuration
~/.vimrc
파일의 내용을 그대로 ~/.config/nvim/init.vim
파일에 붙여넣으면 된다.
패키지 매니저 설치
NeoVim 패키지 매니저에는 Packer.nvim
Vim-Plug
dein.vim
Vundle
이 있다.
Packer 설치
$ brew install lua
$ mkdir -p ~/.local/share/nvim/site/pack/packer/start
$ cd ~/.local/share/nvim/site/pack/packer/start
$ git clone https://github.com/wbthomason/packer.nvim.git
~/.config/nvim/init.vim
파일에 설정 추가
" Packer 설치
packadd packer.nvim
" Packer 설정
call packer#init()
" 플러그인 추가
packer.add('tpope/vim-fugitive')
" 플러그인 설치
call packer#install()
Vundle 설치
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
~/.config/nvim/init.vim
파일에 설정 추가
링크의 코드를 파일 맨 위에 추가하면 된다.
Plugin 설치
bufferline
현재 편집중인 파일들을 탭으로 정리해주는 플러그인
설치 (Vundle 사용)
~/.config/nvim/init.vim
Plugin 'nvim-tree/nvim-web-devicons'
Plugin 'akinsho/bufferline.nvim'
nvim을 종료했다가 다시 실행하여 :PluginInstall
입력
init.vim
에서 필요없어진 플러그인은 Plugin
명령어를 지우고 :PluginClean
을 입력하면 삭제된다.
설정
~/.config/nvim/init.vim
lua << EOF
local bufferline = require('bufferline')
bufferline.setup {
options = {
mode = "buffers", -- set to "tabs" to only show tabpages instead
-- style_preset = bufferline.presets.default, -- or bufferline.presets.minimal,
-- style_preset = bufferline.preset.minimal,
themable = true, -- allows highlight groups to be overriden i.e. sets highlights as default
numbers = "none",
close_command = "bdelete! %d", -- can be a string | function, | false see "Mouse actions"
right_mouse_command = "bdelete! %d", -- can be a string | function | false, see "Mouse actions"
left_mouse_command = "buffer %d", -- can be a string | function, | false see "Mouse actions"
middle_mouse_command = nil, -- can be a string | function, | false see "Mouse actions"
indicator = {
-- icon = '▎', -- this should be omitted if indicator style is not 'icon'
style = 'icon',
},
buffer_close_icon = '',
modified_icon = '●',
close_icon = '',
left_trunc_marker = '',
right_trunc_marker = '',
--- name_formatter can be used to change the buffer's label in the bufferline.
--- Please note some names can/will break the
--- bufferline so use this at your discretion knowing that it has
--- some limitations that will *NOT* be fixed.
name_formatter = function(buf) -- buf contains:
-- name | str | the basename of the active file
-- path | str | the full path of the active file
-- bufnr (buffer only) | int | the number of the active buffer
-- buffers (tabs only) | table(int) | the numbers of the buffers in the tab
-- tabnr (tabs only) | int | the "handle" of the tab, can be converted to its ordinal number using: `vim.api.nvim_tabpage_get_number(buf.tabnr)`
end,
max_name_length = 18,
max_prefix_length = 15, -- prefix used when a buffer is de-duplicated
truncate_names = true, -- whether or not tab names should be truncated
tab_size = 18,
-- diagnostics = false | "nvim_lsp" | "coc",
diagnostics = "coc",
diagnostics_update_in_insert = false,
-- The diagnostics indicator can be set to nil to keep the buffer name highlight but delete the highlighting
diagnostics_indicator = function(count, level, diagnostics_dict, context)
return "("..count..")"
end,
-- NOTE: this will be called a lot so don't do any heavy processing here
custom_filter = function(buf_number, buf_numbers)
-- filter out filetypes you don't want to see
if vim.bo[buf_number].filetype ~= "<i-dont-want-to-see-this>" then
return true
end
-- filter out by buffer name
if vim.fn.bufname(buf_number) ~= "<buffer-name-I-dont-want>" then
return true
end
-- filter out based on arbitrary rules
-- e.g. filter out vim wiki buffer from tabline in your work repo
if vim.fn.getcwd() == "<work-repo>" and vim.bo[buf_number].filetype ~= "wiki" then
return true
end
-- filter out by it's index number in list (don't show first buffer)
if buf_numbers[1] ~= buf_number then
return true
end
end,
offsets = {
{
filetype = "NvimTree",
text = "File Explorer",
-- text_align = "left" | "center" | "right"
text_align = "left",
separator = true
}
},
color_icons = true, -- whether or not to add the filetype icon highlights
get_element_icon = function(element)
-- element consists of {filetype: string, path: string, extension: string, directory: string}
-- This can be used to change how bufferline fetches the icon
-- for an element e.g. a buffer or a tab.
-- e.g.
local icon, hl = require('nvim-web-devicons').get_icon_by_filetype(element.filetype, { default = false })
return icon, hl
-- or
-- local custom_map = {my_thing_ft: {icon = "my_thing_icon", hl}}
-- return custom_map[element.filetype]
end,
show_buffer_icons = true, -- disable filetype icons for buffers
show_buffer_close_icons = true,
show_close_icon = true,
show_tab_indicators = true,
show_duplicate_prefix = true, -- whether to show duplicate buffer prefix
persist_buffer_sort = true, -- whether or not custom sorted buffers should persist
-- can also be a table containing 2 custom separators
-- [focused and unfocused]. eg: { '|', '|' }
-- separator_style = "slant" | "slope" | "thick" | "thin" | { 'any', 'any' },
separator_style = "thick",
enforce_regular_tabs = false,
always_show_bufferline = true,
hover = {
enabled = true,
delay = 200,
reveal = {'close'}
},
-- sort_by = 'insert_after_current' |'insert_at_end' | 'id' | 'extension' | 'relative_directory' | 'directory' | 'tabs' | function(buffer_a, buffer_b)
sort_by = 'insert_at_end'
}
}
EOF
lua
« EOF
와 EOF
사이에 lua
statement를 입력하면 vimscript에 lua statement를 삽입할수 있다.
Guide to using lua in Nvim
iTerm 설정
iTerm이 mouse event를 NeoVim에게 reporting하도록 설정
Comments