Giao lưu sử dụng Vim

Mình lập topic để share file cài đặt .vimrc cũng như screenshot để mọi người có thể giao lưu, học hỏi lẫn nhau.

vim screenshot

Mình xài vim trong cygwin với tmux. Mình sử dụng vim-plug để cài đặt plugin:

Font mình sử dụng là Iosevka

Mình sử dụng vim-clang cho clang-format và autocomplete C++; neomake để kiểm tra syntax.

Mình chỉ mới học xài vim gần đây thôi :slight_smile:

dotfiles của mình

1 Like

I’m too lazy to use :PluginInstall or somethings like that, so I choose Pathogen :sweat:

2 Likes

Vim-plug mình sử dụng vì cộng đồng reddit giới thiệu thôi. Để mình check thử pathogen.

1 Like

Mình đang tập dùng vừa xem cuốn này. Cũng code chưa lâu, tập dùng thói quen tốt để sau làm hiêu quả, nhanh hơn.
Cuốn này mình xem review amz, goodread là best về Vim, mới đọc qua nội dung cũng thấy ok.
Bạn nào muốn cùng đọc k :smiley:

1 Like

How can pathogen work without git clone or something like that?

1 Like

Mình dùng neovim chứ không dùng vim nên dot file của mình là init.vim thay vì .vimrc
Đây là dot file mình vẫn dùng hằng ngày, plugin manager là vim-plug:

call plug#begin('~/.config/nvim/plugged')
    Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
    Plug 'zchee/deoplete-jedi',
    Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
    Plug 'junegunn/fzf.vim'
    Plug 'gabesoft/vim-ags'
    Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
    Plug 'pangloss/vim-javascript'
    Plug 'crusoexia/vim-javascript-lib'
    Plug 'othree/html5.vim'
    Plug 'mxw/vim-jsx'
    Plug 'thaerkh/vim-indentguides'
    Plug 'Valloric/MatchTagAlways'
    Plug 'w0rp/ale'
    Plug 'prettier/vim-prettier', { 'do': 'yarn install' }
    Plug 'jwalton512/vim-blade'
    Plug 'tpope/vim-fugitive'
call plug#end()
let mapleader = ","
augroup vimrc_autocmd
    autocmd!

    autocmd VimEnter * nmap <Leader>w <C-w>w

    " autocmd VimEnter * nmap <F1> :tabnew<CR>:terminal<CR>
    " autocmd VimEnter * imap <F1> <Esc>:tabnew<CR>:terminal<CR>

    autocmd VimEnter * nmap <F2> :tabnew<CR>
    autocmd VimEnter * imap <F2> <Esc>:tabnew<CR>

    autocmd VimEnter * nmap <F4> :w<CR>
    autocmd VimEnter * imap <F4> <Esc>:w<CR>

    autocmd VimEnter * nmap <F5> :wa<CR>
    autocmd VimEnter * imap <F5> <Esc>:wa<CR>

    autocmd VimEnter * nmap <F8> :q!<CR>
    autocmd VimEnter * imap <F8> <Esc>:q!<CR>

    autocmd VimEnter * nmap <F9> :%retab<CR>
    autocmd VimEnter * imap <F9> <Esc>:%retab<CR>

    autocmd VimEnter * nmap <F3> :NERDTreeToggle<CR>
    autocmd VimEnter * imap <F3> <Esc>:NERDTreeToggle<CR>

    autocmd VimEnter * nmap <Leader>j :ALENext<cr>
    autocmd VimEnter * nmap <Leader>k :ALEPrevious<cr>

    autocmd VimEnter * nmap <S-U> <C-R>

    autocmd FileType python set sw=4
    autocmd FileType python set ts=4
    autocmd FileType python set sts=4

    autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
augroup END

" Go to tab by number
noremap <leader>1 1gt
noremap <leader>2 2gt
noremap <leader>3 3gt
noremap <leader>4 4gt
noremap <leader>5 5gt
noremap <leader>6 6gt
noremap <leader>7 7gt
noremap <leader>8 8gt
noremap <leader>9 9gt
noremap <leader>0 :tablast<cr>

nnoremap <C-p> :FZF<CR>
nnoremap <C-l> :Buffers<CR>
nnoremap <C-k> :BTags<CR>
" inoremap ><Tab> ><Esc>F<lyt>o</<C-r>"><Esc>O

let g:python_host_prog="/usr/local/bin/python2"

let g:NERDTreeWinPos = "right"
let g:NERDTreeShowBookmarks=1
let g:NERDTreeWinSize=35
let g:NERDTreeWinSize=40
let NERDTreeMapActivateNode="<space>"
let NERDTreeMapOpenInTab="<ENTER>"

set background=dark
set termguicolors

" filetype plugin indent on

syntax sync minlines=256
set lazyredraw " to avoid scrolling problems
set scrolljump=2
" set synmaxcol=120

set mouse=a
set number
set clipboard=unnamed
set smartcase
set ignorecase
set incsearch
set hlsearch
set showmatch

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab

set foldmethod=indent
set foldlevel=19

" Use deoplete
let g:deoplete#enable_at_startup = 1
let g:deoplete#tag#cache_limit_size = 40000000

" prettier
let g:prettier#config#print_width = 120
let g:prettier#config#tab_width = 4
let g:prettier#exec_cmd_async = 1

let g:mta_filetypes = {
    \ 'javascript.js': 1,
    \ 'html' : 1,
    \ 'xhtml' : 1,
    \ 'xml' : 1,
    \ 'jinja' : 1,
\}

let g:javascript_plugin_flow = 1

let g:ale_sign_error = '●' " Less aggressive than the default '>>'
let g:ale_sign_warning = '.'
let g:ale_lint_on_enter = 0 " Less distracting when opening a new file
let g:ale_lint_on_text_changed = 'never'

highlight ALEErrorSign guifg=#F90000 guibg=black
highlight ALEWarningSign guifg=#F90000 guibg=black
highlight clear SignColumn

highlight Search guibg=peru guifg=white
1 Like

Nice question.

Thực ra thì cách làm của các trình quản lí đều tương tự nhau

Tuy nhiên nếu với các trình quản lí hiện nay, bạn phải add tay vào trong file init.nvim, hay vimrc gì đó, sau đó chạy install => mất 2 bước, file vimscript lại tăng số dòng => dần dần bad performance.

Với pathogen (hay chế độ autoload plugin của vim >=8.0) thì bạn chỉ cần git clone về thư mục đó, vậy là xong, không còn bước nào khác. (Nhét vào git submodule là best case)

Bản thân mình nhận thấy cách làm đó tiện lợi, vì trong dotfiles-config của mình không chỉ có vim, mà còn nhiều config cho các app khác, mỗi lần đổi môi trường làm việc, mình muốn chỉ chạy 1 lệnh install là sẽ hoàn tất và bắt đầu công việc ngay.
=> Vậy nên việc git submodule update hoàn tất là bắt tay vào việc được ngay, không phải mất công vào vim chạy install nữa.

3 Likes

Về vấn đề performance: nhu cầu của mỗi người sẽ dừng lại và ổn định, ví dụ như mình chỉ dùng tầm 1 tá plugin đó thôi, cả năm trời không thay đổi, nếu có đổi thì dăm bửa nửa tháng mới đổi nên việc bạn làm 2 bước hay 1 bước không hề là vấn đề gì (thêm plugin, chạy :PlugInstall cực kì trực quan như sử dụng npm hay composer, pip…)

Vấn đề portable: Bạn hoàn toàn có thể dùng dot file mình chia sẻ trên, đem về máy có neovim và :PlugInstall 1 phát là xong luôn, không phải làm thêm gì cả.

Vấn đề quản lý plugin: Đối với vim-plug, chỉ cần :PlugUpdate là cả danh sách plugin cập nhật, muốn disable tạm thời 1 plugin, chỉ việc comment out cái đó đi, khi dùng lại thì không phải cài lại, chỉ cần bỏ comment đi. Những thao tác đó nếu dùng pathogen thì hoặc là bạn phải đổi tên plugin repo hoặc dùng g:pathogen_blacklist

Nếu xét trên các tiêu chí đó thì cá nhân mình thấy vim-plug ngon hơn

2 Likes

Mình đồng tình với ý kiến vim-plug tiện lợi hơn nhiều so với pathogen.

Tuy nhiên có lẽ do thói quen nên mình không bỏ được pathogen (mặc dù dotfiles vim của mình không cần dùng pathogen nữa do vim8.0 đã tích hợp)

Nếu một ngày không xa mình gặp trường hợp như bạn nên trên thì chắc chắn mình sẽ thay đổi thói quen hiện tại.

2 Likes

Mình sử dụng neovim, lang chính là Elixir và Javascript. Pm sử dụng dein.

2 Likes

plugin:

  • nerdtree
  • vim-autocomplete
  • fugitive
  • syntastic
  • vimify
    Theme: darcula
2 Likes

Theme của anh là gì mà đẹp thế ạ?

1 Like

À theme gruvbox nhé. Font fira code. Terminal là iterm2

2 Likes

Bạn sử dụng vim trên windows hay linux thế. :smiley:

1 Like

Mình sử dụng trên mac

2 Likes

Làm sao để có được mấy cái tab này vậy bạn. Bạn có thể chia sẻ các file cấu hình vim của bạn được không :grin:
Mình thấy theme của bạn đẹp đẹp nên chuyển qua vim thử coi sao, Trước giờ toàn dùng vscode, sublime, với ide

Mình mới có cái giao dienj như vầy :grimacing:

1 Like

Anh ấy đã dẫn link mynvim ở trên rồi bạn.

1 Like

Cái đó có mỗi color và init file thôi, còn các plug đi kèm nữa :grin:
Mình mới dùng vim được 1 tiếng :grimacing:
Hello world

1 Like

Mình nghĩ cái đống

call dein#add('Shougo/dein.vim')
call dein#add('sheerun/vim-polyglot')
call dein#add('Shougo/neosnippet.vim')
call dein#add('Shougo/neosnippet-snippets')
call dein#add('tpope/vim-fugitive')
call dein#add('vim-airline/vim-airline')
call dein#add('vim-airline/vim-airline-themes')
" "call dein#add('SirVer/ultisnips')
" "call dein#add('mklabs/split-term.vim')
" "call dein#add('Lokaltog/powerline-fonts')
" call dein#add('Yggdroot/indentLine')
call dein#add('slashmili/alchemist.vim')
call dein#add('scrooloose/nerdtree')
call dein#add('Shougo/deoplete.nvim')
call dein#add('Xuyuanp/nerdtree-git-plugin')
call dein#add('ervandew/supertab')
call dein#add('chriskempson/base16-vim')
" "call dein#add('flazz/vim-colorschemes')
call dein#add('junegunn/fzf', { 'build': './install --all', 'merged': 0 }) 
call dein#add('junegunn/fzf.vim', { 'depends': 'fzf' })
call dein#add('airblade/vim-gitgutter')
call dein#add('pangloss/vim-javascript')
call dein#add('moll/vim-node')
call dein#add('jelera/vim-javascript-syntax')

chính là tên plugin…

ref:

1 Like

Mình chỉ muốn xin các plugin để tạo theme như trên thôi, mớ plugin này hình như còn làm công việc khác có thể mình không cần :grimacing:
Bạn làm được theme như của bạn trên chưa?
Cái plugin iterm2 giành riêng cho mac, nhưng còn cái airline không biết là cái gì

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?