Skip to content

Instantly share code, notes, and snippets.

@miguelgrinberg
Last active September 15, 2024 18:50
Show Gist options
  • Save miguelgrinberg/527bb5a400791f89b3c4da4bd61222e4 to your computer and use it in GitHub Desktop.
Save miguelgrinberg/527bb5a400791f89b3c4da4bd61222e4 to your computer and use it in GitHub Desktop.
My .vimrc configuration for working in Python with vim
" plugins
let need_to_install_plugins = 0
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
let need_to_install_plugins = 1
endif
call plug#begin()
Plug 'tpope/vim-sensible'
Plug 'itchyny/lightline.vim'
Plug 'joshdick/onedark.vim'
Plug 'ap/vim-buftabline'
Plug 'airblade/vim-gitgutter'
Plug 'preservim/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'jiangmiao/auto-pairs'
Plug 'dense-analysis/ale'
Plug 'majutsushi/tagbar'
Plug 'vim-scripts/indentpython.vim'
Plug 'lepture/vim-jinja'
Plug 'pangloss/vim-javascript'
Plug 'alvan/vim-closetag'
Plug 'maxmellon/vim-jsx-pretty'
call plug#end()
filetype plugin indent on
syntax on
if need_to_install_plugins == 1
echo "Installing plugins..."
silent! PlugInstall
echo "Done!"
q
endif
" always show the status bar
set laststatus=2
" enable 256 colors
set t_Co=256
set t_ut=
" turn on line numbering
set number
" sane text files
set fileformat=unix
set encoding=utf-8
set fileencoding=utf-8
" sane editing
set tabstop=4
set shiftwidth=4
set softtabstop=4
set colorcolumn=80
set expandtab
set viminfo='25,\"50,n~/.viminfo
autocmd FileType html setlocal tabstop=2 shiftwidth=2 softtabstop=2
autocmd FileType css setlocal tabstop=2 shiftwidth=2 softtabstop=2
autocmd FileType javascript setlocal tabstop=2 shiftwidth=2 softtabstop=2
" auto-pairs
au FileType python let b:AutoPairs = AutoPairsDefine({"f'" : "'", "r'" : "'", "b'" : "'"})
" word movement
imap <S-Left> <Esc>bi
nmap <S-Left> b
imap <S-Right> <Esc><Right>wi
nmap <S-Right> w
" indent/unindent with tab/shift-tab
nmap <Tab> >>
nmap <S-tab> <<
imap <S-Tab> <Esc><<i
vmap <Tab> >gv
vmap <S-Tab> <gv
" mouse
set mouse=a
let g:is_mouse_enabled = 1
noremap <silent> <Leader>m :call ToggleMouse()<CR>
function ToggleMouse()
if g:is_mouse_enabled == 1
echo "Mouse OFF"
set mouse=
let g:is_mouse_enabled = 0
else
echo "Mouse ON"
set mouse=a
let g:is_mouse_enabled = 1
endif
endfunction
" color scheme
syntax on
colorscheme onedark
filetype on
filetype plugin indent on
" lightline
set noshowmode
let g:lightline = { 'colorscheme': 'onedark' }
" code folding
set foldmethod=indent
set foldlevel=99
" wrap toggle
setlocal nowrap
noremap <silent> <Leader>w :call ToggleWrap()<CR>
function ToggleWrap()
if &wrap
echo "Wrap OFF"
setlocal nowrap
set virtualedit=all
silent! nunmap <buffer> <Up>
silent! nunmap <buffer> <Down>
silent! nunmap <buffer> <Home>
silent! nunmap <buffer> <End>
silent! iunmap <buffer> <Up>
silent! iunmap <buffer> <Down>
silent! iunmap <buffer> <Home>
silent! iunmap <buffer> <End>
else
echo "Wrap ON"
setlocal wrap linebreak nolist
set virtualedit=
setlocal display+=lastline
noremap <buffer> <silent> <Up> gk
noremap <buffer> <silent> <Down> gj
noremap <buffer> <silent> <Home> g<Home>
noremap <buffer> <silent> <End> g<End>
inoremap <buffer> <silent> <Up> <C-o>gk
inoremap <buffer> <silent> <Down> <C-o>gj
inoremap <buffer> <silent> <Home> <C-o>g<Home>
inoremap <buffer> <silent> <End> <C-o>g<End>
endif
endfunction
" move through split windows
nmap <leader><Up> :wincmd k<CR>
nmap <leader><Down> :wincmd j<CR>
nmap <leader><Left> :wincmd h<CR>
nmap <leader><Right> :wincmd l<CR>
" move through buffers
nmap <leader>[ :bp!<CR>
nmap <leader>] :bn!<CR>
nmap <leader>x :bp<bar>bd#<CR>
" restore place in file from previous session
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" file browser
let NERDTreeIgnore = ['\.pyc$', '__pycache__']
let NERDTreeMinimalUI = 1
let g:nerdtree_open = 0
map <leader>n :call NERDTreeToggle()<CR>
function NERDTreeToggle()
NERDTreeTabsToggle
if g:nerdtree_open == 1
let g:nerdtree_open = 0
else
let g:nerdtree_open = 1
wincmd p
endif
endfunction
function! StartUp()
if 0 == argc()
NERDTree
end
endfunction
autocmd VimEnter * call StartUp()
" ale
map <C-e> <Plug>(ale_next_wrap)
map <C-r> <Plug>(ale_previous_wrap)
" tags
map <leader>t :TagbarToggle<CR>
" copy, cut and paste
vmap <C-c> "+y
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
" disable autoindent when pasting text
" source: https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
@corpmule
Copy link

corpmule commented Oct 17, 2021

@miguelgrinberg and Everyone,

I'm getting errors when I run vim with this vimrc.

I only know enough about all of this ... to be dangerous. :) So I'll probably be asking some stoopid questions.

I'm using version 8.0 in the Windows Linux (Ubuntu) shell or app.

At first the errors were from the "if" statement that runs "curl."

I kept getting permission denied when it attempted to create the ~/.vim/autoload/plugin.vim. I tried chaning the permissions on the directories and files but it didn't help. In fact, this is what it looks like now.

hostname:~$ ls -la ~/.vim/autoload/
ls: cannot access '/home/corpmule/.vim/autoload/plug.vim': Permission denied
...snip...
-????????? ? ?     ?        ?            ? plug.vim

I've never seen anything like that.

I also ran the curl command directly from the command line, using sudo. That might be how the above was actually created.

After I edited the vimrc, to move the ! (bang) -- to be directly after the "silent" command, and, put the url on the same line, those errors went away.

silent! curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

But now ... I get more errors...

Error detected while processing /usr/share/vim/vimrc:
line   17:
E117: Unknown function: plug#begin
line   18:
E492: Not an editor command: Plug 'tpope/vim-sensible
...etc

Those "Not an editor command" erors continue through all the lines (plugins) within this function.

If anybody has an idea what I'm doing wrong, or how I could try to fix this, I'd appreciate it.

@miguelgrinberg
Copy link
Author

@corpmule I don't know. I'm not a regular Windows user, but I have used this configuration on WSL occasionally and I don't recall having any problems.

@miguelgrinberg
Copy link
Author

@RandomShtuf I'm not sure, but the error comes from the auto-pairs plugin, so it must be related to that. Unfortunately I'm not an expert in vim plugin internals, so I cannot really help you on this.

@RandomShtuf
Copy link

@RandomShtuf I'm not sure, but the error comes from the auto-pairs plugin, so it must be related to that. Unfortunately I'm not an expert in vim plugin internals, so I cannot really help you on this.

oh... thanks anyway... fortunately i was able to fix it... i just had to remove ~/.vim like you did in your video

@RandomShtuf
Copy link

another quick question tho... is there a way to show dot files/hidden files on the file manager?

@yuxiaoy1
Copy link

yuxiaoy1 commented Nov 8, 2021

@RandomShtuf you can add let NERDTreeShowHidden=1

@Jooaomar
Copy link

thanks

Copy link

ghost commented Mar 25, 2022

@miguelgrinberg sir I am not able to on file system and tagbar.
could you please tell me how to do that

@mamodrzejewski
Copy link

Hi Miguel. Are you using the default macOS terminal? Does not seem to work properly for me when using the nice onedark theme, no matter the settings. Works fine with set termguicolors and iTerm though. Any ideas on this matter? Thanks!

@miguelgrinberg
Copy link
Author

@mamodrzejewski I use iterm2.

@45-4ry
Copy link

45-4ry commented Dec 7, 2022

Please help me to learn how to show echo error message like bellow.
Screen Shot 2022-12-07 at 20 10 53
I was try to learn how to NERDtree get message error from ALE Linter and show it on bottom panes in vim. But I am lost…. Thank you Very Much.

@miguelgrinberg
Copy link
Author

@45-4ry I don't think ALE can do that, it checks in the background and adds marks on the lines that have errors. Try the vim-syntastic extension instead.

@45-4ry
Copy link

45-4ry commented Dec 7, 2022

@miguelgrinberg Thank you

@Pim-tech
Copy link

Pim-tech commented Dec 7, 2022

@miguelgrinberg : Thank's for your replies.
Have a nice day! JeanYves.

@csrgdev
Copy link

csrgdev commented Jan 9, 2023

Miguel, gracias por compartir.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment