LINUX.ORG.RU
Ответ на: комментарий от anonymous

спасибо, ты лучший, иди съешь ещё этих мягких французских булок, да выпей чаю

tz4678 ★★
() автор топика

Предлагайте

предлагаю! Добавить то что требуется в работе и убрать то что не требуется.

Dred ★★★★★
()

А что тебе не хватает? Тут же не экстрасенсы.

anonymous
()

Судя по YouCompleteMe это...

.vimrc для программиста?

Я бы добавил (я сам пишу на С, так что выбор несколько своеобразный, да):

1 syntastic. Это мастхэвная вещь для того, чтобы проверить через splint косяки и ошибки прямо в редакторе. syntastic умеет проверять не только С/С++, а принципе, он и руби и питон с похапе обработать может. И bash тоже. Но для С/С++ это то, что я как доктор могу рекомендовать.

2 Если используете doxygen, то добавьте ещё this

3 Для перезагрузки .vimrc и корректировки отметки времени редактирования я бы сделал так:

" Reload .vimrc after it's saving.
autocmd! BufWritePost $MYVIMRC source $MYVIMRC
" Rewrite timestamp in .vimrc.
autocmd! BufWritePre $MYVIMRC call setline(1, '" Last update: '.strftime("%d.%m.%Y %H:%M"))

4 Спеллчекер:

" Add language spelling.
set spell spelllang=en,ru

" Check language spelling.
nmap <F3> :setlocal spell spelllang=ru,en<CR>
imap <F3> <ESC>:setlocal spell spelllang=ru,en<CR>i
nmap <S-F3> :setlocal nospell<CR>
imap <S-F3> <ESC>:setlocal nospell<CR>i

5 Назначения клавиш (на мой вкус):

" Key settings.
" F2 to save current file.
map <F2> :w<CR>
nmap <F2> <Esc>:w<CR>
imap <F2> <Esc>:w<CR>

" F12 to quit without saving.
map <F12> :q!<CR>
nmap <F12> <Esc>:q!<CR>
imap <F12> <Esc>:q!<CR>

" Some fixes.
cnoreabbrev W! w!
cnoreabbrev Q! q!
cnoreabbrev Qall! qall!
cnoreabbrev Wq wq
cnoreabbrev Wa wa
cnoreabbrev wQ wq
cnoreabbrev WQ wq
cnoreabbrev W w
cnoreabbrev Q q
cnoreabbrev Qall qall

6 Работа со вкладками:

" Работа с вкладками.
" Открываем новую по Ctl+T и закрываем по Ctrl+W.
nmap <C-t> :tabnew<CR>
imap <C-t> <Esc>:tabnew<CR>
nmap <C-w> :tabclose<CR>
imap <C-w> <Esc>:tabclose<CR>

" Переключаемся между вкладками Shift+TAB.
map <S-TAB> :tabprevious<CR>
nmap <S-TAB> :tabprevious<CR>
imap <S-TAB> <Esc>:tabprevious<CR>i

7 Парные скобки:

" Auto pairing.
imap [ []<left>
imap ( ()<left>
imap { {}<left>
imap < <><left>
imap {<CR> {<CR>}<ESC>O
imap {;<CR> {<CR>};<ESC>O

8 Для написания bash-скриптов (делаем скрипт сразу исполняемым):

" Settings for bash scripts.
" Проверяем запись shell-script. Если он не исполняемый, то делаем его
" исполняемым. Если уже исполняемый, то просто сохраняем.
au BufWritePost *.sh if FileExecutable("%") | if getline(1) =~ "^#!" | silent !chmod u+x % | endif | endif

" Проверка файла с расширением .sh на исполняемость.
function! FileExecutable(fname)
	execute "silent! ! test -x" a:fname
	return v:shell_error
endfunction

9 Про кодировки:

set enc=utf-8
set fileformat=unix
set ffs=unix,dos,mac
set termencoding=utf-8
set fileencodings=utf-8,koi8-r,cp1251,cp866

10 Для установки плагинов я лично использую pathogen, но это чисто моя такая вкусовщина.

Ну вот, как-то вот так…

P.S. Airline не использую, больно жирный вариант, IMHO. Я вот так:

" Статусная строка.
set laststatus=2
set statusline=%1*\ %f%m%r%h%w\%=%([%{&ff}\|%{(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\",B\":\"\")}%k\|%Y]%)\ %([%l,%v][%p%%]\ %)

P.P.S. SnipMate забыл и коллекцию сниппетов. Там под разные языки есть, в добавок коллекция настраиваемая, её можно пополнять своими сниппетами.

И vimwiki до кучи. Можно чисто локально вести заметки и справочники, со списком TODO, генерировать статические html и грузить на веб-сервер как такую статическую wiki прямо не выходя из vim.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)

vim как таковой сам по себе очень хорош, так ли уж нужно как-то особенно настраивать его?

Из плагинов мне нравится ctrlpvim/ctrlp.vim для открытия файлов, но, похоже, тут для этого есть fzf.

Yankring, чтобы легко вставлять из регистров.

NERDTree, NERDCommenter многие хвалят, я как-то не очень понял, чем они так хорошо. vim-fugitive хвалят тоже, но я использую git из командной строки. airline не очень понятно, зачем нужен.

anarquista ★★★★★
()

Авто сохранение/загрузку образа окна (ради сохранения созданного фолдинга). Оказалось очень удобным, пользуюсь.

pavlick ★★
()

Мой vimrc – та ещё помойка, но есть и годное, например:

" swap ' and ` keys
nnoremap ' `
nnoremap ` '

" automatically enable highlighting of search results on * and #
nnoremap * :set hlsearch<cr>*
nnoremap # :set hlsearch<cr>#

" replace text captured by a {motion} with contents of a register
nnoremap <silent> cp :let g:substitutemotion_reg = v:register
            \ <bar> set opfunc=SubstituteMotion<CR>g@
" substitute {motion} text with contents of a register
function! SubstituteMotion(type, ...)
    let l:reg = g:substitutemotion_reg
    if a:0
        " visual mode, use '< and '> marks
        silent exe "normal! `<" . a:type . "`>\"_c\<c-r>" . l:reg . "\<esc>"
    elseif a:type == 'line'
        " linewise
        silent exe "normal! '[V']\"_c\<c-r>" . l:reg . "\<esc>"
    elseif a:type == 'block'
        " blockwise-visual
        silent exe "normal! `[\<C-V>`]\"_c\<c-r>" . l:reg . "\<esc>"
    else
        " characterwise
        silent exe "normal! `[v`]\"_c\<c-r>" . l:reg . "\<esc>"
    endif
endfunction

" close window to the left/down/up/right
nnoremap <silent> <c-k>h     <c-w>h<c-w>p:<c-r>=winnr('#')<cr>hide<cr>
nnoremap <silent> <c-k><c-h> <c-w>h<c-w>p:<c-r>=winnr('#')<cr>hide<cr>
nnoremap <silent> <c-k>j     <c-w>j<c-w>p:<c-r>=winnr('#')<cr>hide<cr>
nnoremap <silent> <c-k><c-j> <c-w>j<c-w>p:<c-r>=winnr('#')<cr>hide<cr>
nnoremap <silent> <c-k>k     <c-w>k<c-w>p:<c-r>=winnr('#')<cr>hide<cr>
nnoremap <silent> <c-k><c-k> <c-w>k<c-w>p:<c-r>=winnr('#')<cr>hide<cr>
nnoremap <silent> <c-k>l     <c-w>l<c-w>p:<c-r>=winnr('#')<cr>hide<cr>
nnoremap <silent> <c-k><c-l> <c-w>l<c-w>p:<c-r>=winnr('#')<cr>hide<cr>

" go to the next/previous incremental search match
cnoremap <expr> <tab>
       \ feedkeys(index(['/', '?'], getcmdtype()) >= 0 ? "<c-g>" : "<tab>",
       \          'tn') ? '' : ''
cnoremap <expr> <s-tab>
       \ feedkeys(index(['/', '?'], getcmdtype()) >= 0 ? "<c-t>" : "<s-tab>",
       \          'tn') ? '' : ''
xaizek ★★★★★
()

Чего не хватает в моем vimrc?

echo '! emacs' > .vimrc
eve
()

Это всё равно что показать свою квартиру просить чего там не хватает.

Всё ну очень индивидуально.

Закладки. Я записываю полезные рецепты для всего. И делаю алиасы для быстрого доступа. Например, вот быстрый доступ к файлу с записками по vim:

cnoreabbrev _sql tab drop C:\Users\olsh0814\Documents\home\works\SQL.txt

Лично меня раздражает перемещение курсора назад при выходе из insert mode:

function! s:CorrectPosition()
	if !exists("b:tmpNormalMode")
		let l:newCol = getpos('.')[2]
		if ( l:newCol != 1 )
			let l:newCol+=1
		endif
		call cursor(getpos('.')[1], l:newCol)
	else
		unlet b:tmpNormalMode
	endif
endfunction
au! InsertLeave * call <SID>CorrectPosition()
inoremap <buffer> <silent> <C-o> <Esc>:let b:tmpNormalMode=1<CR>gi<C-o>

В insert mode я предпочитаю ходить по визуальным линиям.

imap <buffer> <silent> <Up>   <C-o>gk
imap <buffer> <silent> <Down> <C-o>gj
imap <buffer> <silent> <Home> <C-o>g<Home>
imap <buffer> <silent> <End>  <C-o>g<End>

Также я предпочитаю видеть результаты поиска только тогда, когда я по ним навигируюсь:

function! s:HlSearchOff()
	if ( exists ("b:last_search") && b:last_search==@/ )
		" need to clear
		if ( exists("b:search_cleared") && b:search_cleared==1 )
			" Do nothing
		else
			" nohlsearch " Does not work in autocmd and functions - see help
			" redraw
			set nohlsearch
			let b:search_cleared=1
		endif
	else
		let b:search_cleared=0
		set hlsearch
	endif

	let b:last_search=@/
endfunction

function! s:HlSearchOn()
	let b:search_cleared=0
	set hlsearch
endfunction

autocmd! CursorMoved * call <SID>HlSearchOff()

nnoremap <silent> n n:call <SID>HlSearchOn()<CR>
nnoremap <silent> N N:call <SID>HlSearchOn()<CR>

Ну и еще много такого.

Kroz ★★★★★
()
           "echo ">^.^<"

...


    Plugin 'majutsushi/tagbar' 
    Plugin 'fedor-elizarov/vim-startify'
...

    map <F1>     :tabnext    <CR> 
    map <F2>     :NERDTree   <CR> 
    map <F3>     :Tagbar     <CR>  
    map <F4>     :tabnew     <CR>  
    map <F5>     :split  <CR> 
    map <F6>     :vs     <CR>

...

    autocmd User Startified setlocal cursorline

    let g:startify_enable_special      = 0
    let g:startify_files_number        = 8
    let g:startify_relative_path       = 1
    let g:startify_change_to_dir       = 1
    let g:startify_update_oldfiles     = 1
    let g:startify_session_autoload    = 1
    let g:startify_session_persistence = 1


    let g:startify_custom_header =
            \ startify#fortune#cowsay('', '═','║','╔','╗','╝','╚')
    
    autocmd VimEnter *
                \   if !argc()
                \ |   Startify
                "\ |   NERDTree
                \ |   wincmd w
                \ | endif

    let g:startify_lists = [
      \ { 'type': 'sessions',  'header': ['   Сессии']             },
      \ { 'type': 'files',     'header': ['   Последние файлы']    },
      \ { 'type': 'dir',       'header': ['   Каталоги '. getcwd()]},
      \ { 'type': 'bookmarks', 'header': ['   Закладки']           },
      \ { 'type': 'commands',  'header': ['   Комманды']           },
      \ ]
    let g:startify_files_number = 15
    let g:startify_bookmarks = ['~/.vimrc']
    let g:startify_commands  = ['tabnew ~/.vimrc']



let g:startify_session_before_save = [
            \ 'silent! NERDTreeClose'
            \ ]
autocmd SessionLoadpost * NERDTree

anonymous
()

Баб, веселья, денег и смысла.

anonymous
()
Ответ на: Мне нормально. от Moisha_Liberman

ну...

с кучерявыми скобками сразу можно понять — закрытая всегда будет на сл строке, потому нет смысла лепить ее на той же, тут больше снипмате подходит и делает то что надо.

с круглыми, менее явно — открывая скобку я еще не окончательно уверен, что она там нужна, особенно с выражениями где приоритет действия важен или при нескольких условиях с комбинациями и/или, а там, где скобки будут точно, по крайней мере внешние — снова снипмате отыграет правильнее.

квадратные — ну, такое, почти такое же, как и кавычки, отказался по той же причине что и, собсно, с кавычками.

и, конечно, это все, так же как и у тебя, лишь личное мнение, ведь фломастеры, они у всех разные.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Да. Вы правы.

Я просто не только для С использую эти же настройки. Настройка она и для всех файлов, всех типов – и простого текста и маркдауна и С и javascript. Не хотелось под отдельные filetype отдельные настройки лепить.

Moisha_Liberman ★★
()
Ответ на: комментарий от tz4678

Незнаю.

Я ale даже не пробовал. У меня syntastic плотно завязан на splint (для оперативной проверки С/С++ кода на косяки и дырья), так что даже пробовать ale не буду скорее всего. splint это такой бесплатный аналог pvs-studio. Точнее, наоборот это pvs-studio аналог splint.

Moisha_Liberman ★★
()

nnn вместо nerdtree, категорически рекомендую

neomake - то же самое что :make, только асинхронно

ale и youcompleteme дублируют функциональность друг друга, можно оставить что-то одно. А еще лучше заменить оба на написанный на vimscript и не требующий никаких питонов vim-lsp. Кстати в новой версии neovim обещают запилить встроенный lsp клиент, вот тогда заживем.

set autowrite - очень нравится эта опция.

Lrrr ★★★★★
()
Ответ на: комментарий от pihter

Syntastic надо конфигурировать, как правило.

В принципе, есть два варианта.

Либо вписываем в свой .vimrc что-то типа let g:syntastic_c_include_dirs = [ '../my_include', 'another_include' ] если для С, для С++ соответственно будет syntastic_cpp_include_dirs.

Либо делаем в каталоге проекта файл .syntastic_cpp_config, где на каждой строке строго по отдельности вписываем:

-Ipath_1
-Ipath_2
...
-Ipath_N

Тогда в .vimrc можно указать для каждого своего проекта, например, let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic_project_1' (например).

Но вообще посмотрите: help syntastic-checkers и там конкретно по своему языку. Для С частенько конфиг один будет, для С++ – другой, для С# (и прочих) соответственно третьи.

Сам по себе syntastic штука крайне мощная, в особенности в паре со splint (для сишника), так что конфигурировать его надо крайне точно.

Наконец, приведу часть, касающуюся splint/syntastic из своего vimrc (она меняется от случая к случаю), вдруг кому сгодится в качестве примера:

" Syntastic settings.
" https://github.com/vim-syntastic/syntastic/wiki/C%3A---gcc
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1

" Use syntastic on opening file and on saving/quitting.
" При открытии файл не проверяем -- пох, а вот при зарытии и 
" сохранении -- в обязательном порядке!
let g:syntastic_check_on_open = 0
let g:syntastic_check_on_wq = 1

" Automatically jump to the first detected issue.
let g:syntastic_auto_jump = 1

" Include directory
"let g:syntastic_c_include_dirs = ['/usr/include/gtk-3.0/gtk','/usr/include/webkitgtk-4.0/webkit2']
let g:syntastic_c_check_header = 0
let g:syntastic_cpp_check_header = 0
let g:syntastic_c_no_include_search = 1
let g:syntastic_c_auto_refresh_includes = 1
let g:syntastic_c_no_default_include_dirs = 1

" Compiler's options:
" let g:syntastic_c_compiler_options = ' -std=gnu18'
"let b:syntastic_c_cflags = '-I/usr/include/gtk-3.0/gtk -I/usr/include/webkitgtk-4.0/webkit2'

" Опции можно указать и в конфигурационном файле:
" Создать данный файл можно так:
" pkg-config --cflags gtk+-3.0 glib-2.0 webkit2gtk-4.0 | tr ' ' '\n'
" >.syntastic_c_config
" И потом добавить -Wall, -Werror, -Wextra, -std=gnu18 по одной опции
" на строку.
let g:syntastic_c_config_file = '~/.vim/.syntastic_c_config'
" Syntax checkers.
let g:syntastic_c_checkers = ['make','splint','gcc']
" C-compiler.
let g:syntastic_c_compiler = 'gcc'
let g:syntastic_c_compiler_options = "-std=gnu99
        \  -Wall -Wextra -Wshadow -Wpointer-arith
        \  -Wcast-align -Wwrite-strings -Wmissing-prototypes
        \  -Wmissing-declarations -Wredundant-decls -Wnested-externs
        \  -Winline -Wno-long-long -Wuninitialized -Wconversion
        \  -Wstrict-prototypes -pedantic"

" Конфигурационный файл splint.
" let g:syntastic_splint_config_file = '.syntastic_splint_config'
" Check syntax for bash:
let b:shell = 'bash'

" <F9> to open :Errors, <Ctrl+F9> to :lclose errors list.
map <F9> :Errors<CR>
map <C-F9> :lclose<CR>

highlight link SyntasticErrorSign SignColumn
highlight link SyntasticWarningSign SignColumn
highlight link SyntasticStyleErrorSign SignColumn
highlight link SyntasticStyleWarningSign SignColumn

Комменты там что к чему в принципе есть. Остальное – по ману.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: комментарий от pihter

Незачто.

Я не сравнивал splint с pvs-studio, но в паре splint+syntastic позволяют не насажать досадных ошибок типа «немытых рук», когда не со зла, по дурости косячишь. И за бесплатно.

В остальном да, syntastic штука офигенная, там ещё статические анализаторы для других языков можно как-то вроде подключать, я не пробовал, мне без надобности.

Пользуйтесь на здоровье, в общем, кому надо. =) Рад что понравилось.

Moisha_Liberman ★★
()
Ответ на: Незачто. от Moisha_Liberman

Переписал конфиг:

autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
  \| PlugInstall --sync | source $MYVIMRC
\| endif

call plug#begin('~/.vim/plugged')
Plug 'liuchengxu/vim-better-default' " https://github.com/liuchengxu/vim-better-default

Plug 'tpope/vim-surround' " https://github.com/tpope/vim-surround

Plug 'joshdick/onedark.vim' " https://github.com/joshdick/onedark.vim

Plug 'vim-airline/vim-airline' " https://github.com/vim-airline/vim-airline
Plug 'vim-airline/vim-airline-themes' " https://github.com/vim-airline/vim-airline-themes
let g:airline#extensions#tabline#enabled = 1
let g:airline_powerline_fonts = 1
let g:airline_theme='onedark'
let g:airline#extensions#ale#enabled = 1

Plug 'editorconfig/editorconfig-vim' " https://github.com/editorconfig/editorconfig-vim

" yay -S nnn
Plug 'mcchrish/nnn.vim' " https://github.com/mcchrish/nnn.vim

" yay -S fzf ripgrep
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim' " https://github.com/junegunn/fzf.vim

nnoremap <silent> <C-p> :Files<CR>
nnoremap <silent> <Leader>/ :Rg<CR>

Plug 'frazrepo/vim-rainbow' " https://github.com/frazrepo/vim-rainbow
let g:rainbow_active = 1

Plug 'airblade/vim-gitgutter' " https://github.com/airblade/vim-gitgutter

Plug 'preservim/nerdcommenter' " https://github.com/preservim/nerdcommenter

" Must be set before plugin is loaded
let g:ale_completion_enabled = 1
Plug 'dense-analysis/ale' " https://github.com/dense-analysis/ale
let g:ale_fix_on_save = 1

" yay -S python-pylint python-black eslint
let g:ale_linters = {
\   'javascript': ['eslint'],
\   'python': ['pylint']
\}

let g:ale_fixers = {
\   '*': ['remove_trailing_lines', 'trim_whitespace'],
\   'javascript': ['eslint'],
\   'python': ['black']
\ }

call plug#end()

" Full color theme support
set termguicolors

" Theme
colorscheme onedark

let mapleader="\<Space>"

tz4678 ★★
() автор топика
Ответ на: комментарий от tz4678

При наличии LSP-сервера для конкретного языка и компилятора.

У GCC, например, оного до сих пор нет.

Но вообще, Syntastic сильно затормаживает сохранение файлов, Мы зачастую его вообще отключаем.

mertvoprog
()
26 апреля 2021 г.

Ещё годная настройка - подсветка вызова функций (странно, но дефолтно не подсвечивает):

$ cat ~/.vim/syntax/c.vim
syn match Function /\w\+ *\((\)\@=/

всё норм, но хотелось бы подсветку и в таких случаях:

...::подсвеченное_имя<неподсвеч_шаблон>();

Как закостылить? Я пытался написать, но пока не вышло, в виме, естественно :), свой синтаксис регулярок. Грубо греп аналог (но не совсем - шаблон тоже будет подсвечен):

$ echo 'asdf<int>::sdf<int>()' | grep -E '\w+<[^<]*> *\('

UPD:
Написал, подсвечивает цпп’шные вызовые как надо и никакой шланговский semantic highlighting не нужен (который жутко тормозной):

$ cat ~/.vim/syntax/c.vim
syn match Function /\w\+\( *(\)\@=/
syn match Function /\w\+\( *<[^<]*> *(\)\@=/
pavlick ★★
()
Последнее исправление: pavlick (всего исправлений: 2)
Ответ на: комментарий от pavlick

Так еще и макросы красятся в свой цвет (когда все символы имени в верхнем регистре):

$ cat ~/.vim/syntax/c.vim
syn match Function /\w\+\( *(\)\@=/
syn match Function /\w\+\( *<[^<]*> *(\)\@=/
syn match PreProc /\<[0-9_[:upper:]]*\>/
pavlick ★★
()
Последнее исправление: pavlick (всего исправлений: 1)
Ответ на: комментарий от xaizek

" automatically enable highlighting of search results on * and #
nnoremap * :set hlsearch*
nnoremap # :set hlsearch#

nnoremap <silent> <Esc><Esc> <Esc>:nohlsearch<CR><Esc>

nnoremap <CR> :noh<CR><CR>
Im_not_a_robot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.