Конфигурация Vim для редактирования на стороне сервера

Я всегда использую Vim на наших серверах (в основном на основе Ubuntu), и мне всегда не хватает хорошей конфигурации, которая бы подходила vim поверх SSH без особых излишеств.

Я хотел бы собрать как можно больше параметров конфигурации для тех, кто пишет в основном коды bash, zsh и ruby ​​непосредственно на сервере.

5 ответов

Лучшее, что я узнал за последнее время, это использование jj вместо <esc> чтобы войти в нормальный режим:

imap jj <Esc>

Кроме того, если вы используете разделение через split (высокий терминал) или vsplit (широкий терминал) команда, затем переназначение команды switch-split неоценимо; я использую , (запятая) переключаться между моими разделениями:

map , <C-w><C-w>

Ознакомьтесь с основными вопросами для vim over Stack Overflow.

Ниже приведен мой.vimrc, который в основном сосредоточен на IDE-функциях Perl, Mason и Javascript, но вы можете адаптировать то, что вы видите здесь, для специфики ruby ​​/sh. Уже несколько лет пользуюсь им по SSH. Вне контекста IDE автоматическое резервное копирование спасло мою задницу не раз.

" Embedded() is a function that will parse a text buffer 
" looking for embedded vim commands, and execute them.
" Call it with a range of lines to check, eg to check the whole 
" file:
" 
"  :%call Embedded() 
"
" Commands should be prefixed by the sequence :vim: .
"
function Embedded() range
    let n = a:firstline
    while n <= a:lastline
        let l = getline(n)
        let p = stridx(l,':vim:')
        if p > -1
            let p = p + 5 
            let c = strpart(l,p)
            execute c
        endif   
        let n = n + 1 
    endwhile 
endfunction
" call Embedded() whenever a file is loaded and 
" parse the entire file.  You may not want to do 
" this for *; maybe just your src tree or certain 
" file types or something.
autocmd BufWinEnter * %call Embedded()

" Create nested folds on custom expressions, based 
" on the current buffer's filetype or syntax. 
"
let g:foldlevel = 0 
let g:foldstartexpr = ''
let g:foldendexpr   = ''
function GetCustomFold()
    if getline(v:lnum) =~ g:foldstartexpr
        let g:foldlevel = g:foldlevel + 1 
        return ">".g:foldlevel
    elseif getline(v:lnum) =~ g:foldendexpr
        let thislevel = g:foldlevel
        let g:foldlevel = g:foldlevel - 1 
        return "<".thislevel
    else
        return g:foldlevel
    endif
endfunction
function SetFoldType()
    let f = &filetype ? &filetype : &syntax
    if f == 'mason'
        let g:foldstartexpr = '^\s*<\(script\|style\|%init\|%attr\|%once\|%args\|%flags\|%shared\|%def\)[^>]*>\s*$'
        let g:foldendexpr   = '^\s*</\(script\|style\|%init\|%attr\|%once\|%args\|%flags\|%shared\|%def\)[^>]*>\s*$'
    elseif f == 'perl'
        let g:foldstartexpr = '^sub.*{\s*$'
        let g:foldendexpr   = '^}\s*$'
    elseif f == 'javascript'
        let g:foldstartexpr = '^function.*{\s*$'
        let g:foldendexpr   = '^}\s*$'
    else
        return
    endif
    setlocal foldexpr=GetCustomFold()
    setlocal foldmethod=expr
endfunction
autocmd BufWinEnter * %call SetFoldType()

function SetPerlIDE()
    " check perl code with :make
    setlocal makeprg=perl\ -c\ %\ $*
    setlocal errorformat=%f:%l:%m
    setlocal autowrite

    " comment/uncomment blocks of code (in vmode)
    map ^C :s/^/#/gi<Enter>
    map ^X :s/^#//gi<Enter>

    " my perl includes pod
    let perl_include_pod = 1

    " syntax color complex things like @{${"foo"}}
    let perl_extended_vars = 1

    " Tidy selected lines (or entire file) with _t:
    nnoremap <silent> _t :%!perltidy -q<Enter>
    vnoremap <silent> _t :!perltidy -q<Enter>

    " perlcritic selected lines (or entire file) with _p:
    nnoremap <silent> _p :%!perlcritic -q<Enter>
    vnoremap <silent> _p :!perlcritic -q<Enter>
endfunction
autocmd FileType perl call SetPerlIDE()


" map II :r ~/.vim/template.pod<CR>

set tabstop=4
set number
set showmatch
set ruler
set backup
set backupdir=~/.vim/backups
set directory=~/.vim/backups
set tags=~/.vim/tags

set backupskip=/tmp/*,/private/tmp/*"

" we get colors, we get lots and lots of colors
syntax on
set bg=dark
colors darkblue

Небольшая работа вокруг меня, вам может понравиться, если вы используете Vim

Шаг 1: Загрузите последнюю версию плагина с vim.org

Загрузите плагин с vim.org

$ cd / usr / src $ wget -O mru.vim http://www.vim.org/scripts/download_script.php?src_id=9274

Шаг 2: Установите плагин MRU vim

$ mkdir ~/.vim #, если каталог уже не существует $ cd ~ /.vim / plugin / $ cp /usr/src/mru.vim.

7 мощных функций MRU.vim

После установки этого плагина каждый раз, когда вы открываете файл для чтения или записи, он будет добавлен в список MRU. 1. Просмотрите последние использованные файлы в Vi / Vim Editor

: MRU

Примечание: MRU (в верхнем регистре) работает.:mru (в нижнем регистре) не работает.

: MRU покажет "последние использованные" файлы, упорядоченные по последнему использованию сверху вниз, как показано ниже. Чтобы открыть файл, нажмите ENTER, когда курсор находится в этом имени файла. Рис. Редактор Vim, отображающий список "Недавние документы"

Рис. Редактор Vim, отображающий список "Недавние документы"

Примечание. Сразу после установки плагина MRU в списке MRU могут отсутствовать файлы. Используйте редактор Vim, чтобы открыть несколько файлов после установки плагина, для увеличения списка MRU. 2. Как увеличить количество списков MRU? (Увеличьте количество сохраняемых файлов)

По умолчанию в списке MRU хранятся только последние 10 использованных файлов. Добавьте следующую строку в ~/.vimrc, чтобы увеличить этот предел, как показано ниже.

$ cat ~/.vimrc let MRU_Max_Entries = 20

  1. Как искать файлы в списке MRU

Когда вы увеличили количество файлов, может быть трудно прокрутить список MRU, чтобы выбрать файл, который вы ищете. Вместо этого вы можете использовать обычные команды Vim для поиска в списке MRU. Таким образом, вы можете дать (косая черта) / и дать шаблон для поиска.

В следующем примере список MRU был очень длинным. Я сделал "/ yum", который автоматически переместил курсор в запись MRU /etc/yum.conf. Нажатие Enter, откроет этот файл. Рис. Поиск в списке MRU с помощью /

Рис. Поиск в списке MRU с помощью /

Вы также можете использовать функцию поиска MRU, как описано ниже.

* Enter the partial file name and press TAB which will fill the file name, which you can open by pressing enter,
* Enter one or two characters of the file name or the path name, and press tabs to rotate around the file names.
  1. Открытие файлов из списка MRU в новой вкладке

Нажатие ввода в записи MRU откроет файл в том же окне по умолчанию. Он откроется в новом окне, если файл, открытый в текущем окне, еще не сохранен.

* To open the file from the MRU entry in a new Tab , press ‘t’ when the cursor is on a file name in MRU window.
* :tabn will take you to the next tab
* :tabp will take you to the previous tab
  1. Обновление окна MRU

Чтобы обновить текущее окно MRU, нажмите "u". При открытии окна MRU оно всегда будет открывать новый контент. 6. Исключение некоторых файлов с использованием MRU_Exclude_Files

Чтобы исключить отображение определенных файлов в MRU, вы можете сохранить регулярное выражение в переменной MRU_Exclude_Files как:

$ cat ~/.vimrc let MRU_Exclude_Files = '^ / tmp /.\ | ^ / вар / TMP /."Для Unix

Вышеприведенное исключит / tmp и / var / tmp из хранилища в MRU. 7. Включение некоторых файлов с использованием MRU_Include_Files

Чтобы включить только определенные типы файлов в MRU, вы можете сохранить регулярное выражение в переменной MRU_Include_Files, как показано ниже. Это будет включать только те файлы, которые находятся в / home / ramesh для хранения в MRU.

$ cat ~/.vimrc let MRU_Include_Files = '^ / home / rajat /.*'

Проверить .vimrc а также .vim из дакроновых файлов.

Я использую следующее в основном в каждой системе, которую использую. Я действительно не приложил много усилий, чтобы изменить его, хотя. Я использую vim в качестве инструмента редактирования конфигурации для большого количества серверов, но в настоящее время я не склонен много заниматься разработкой в ​​vim

set modeline
set background=dark
set autowrite
nmap <tab> :bn<cr>
nmap <s-tab> :bp<cr>

Параметры nmap позволяют мне использовать tab и shift-tab для переключения между несколькими открытыми буферами, что я считаю довольно ценным.

Другие вопросы по тегам