دليل احترافي لإعداد ملف Vimrc وتخصيص محرر Vim بالمختصرات وVimscript وشريط الحالة
مقدمة: لماذا يستحق ملف .vimrc وقتك؟
يُعدّ ملف .vimrc حجر الأساس في تخصيص محرر Vim. فمن خلاله يمكنك تحويل المحرر من بيئة نصية بسيطة إلى مساحة عمل سريعة ومرنة ومناسبة تماماً لأسلوبك في البرمجة والتحرير. وكلما كان إعداد هذا الملف منظماً ومدروساً، ازدادت إنتاجيتك وسهُل عليك التنقل والبحث والتنفيذ داخل المشروع.
في هذا الدليل سنعيد بناء تجربة استخدام Vim خطوة بخطوة، بدءاً من الإعدادات الأساسية، مروراً بتنظيم الملف، ثم إضافة الإضافات، وكتابة الاختصارات، واستخدام Vimscript، وصولاً إلى تخصيص شريط الحالة.

إنشاء البنية الأساسية لملفات Vim
قبل البدء في التخصيص، من الأفضل تجهيز المجلدات التي سيعتمد عليها Vim لتخزين الإضافات والألوان والنسخ الاحتياطية. هذا التنظيم المبكر يسهل عليك إدارة بيئتك لاحقاً.
.vim/
├── autoload/
├── backup/
├── colors/
└── plugged/
ولإنشاء هذه البنية على أنظمة Linux أو macOS استخدم:
$ mkdir -p ~/.vim ~/.vim/autoload ~/.vim/backup ~/.vim/colors ~/.vim/plugged
بعد ذلك أنشئ ملف .vimrc داخل المجلد الرئيسي للمستخدم:
$ touch ~/.vimrc
الإعدادات الأساسية في Vim لتحسين تجربة التحرير
الخطوة الأولى لأي ملف .vimrc فعّال هي ضبط الإعدادات التي تؤثر مباشرة في طريقة الكتابة والبحث والتنقل داخل الملفات.
تفعيل اكتشاف أنواع الملفات والإضافات
" Disable compatibility with vi which can cause unexpected issues.
set nocompatible
" Enable type file detection.
filetype on
" Enable plugins and load plugin for the detected file type.
filetype plugin on
" Load an indent file for the detected file type.
filetype indent on
هذا الجزء يعطّل التوافق القديم مع vi ويمنح Vim سلوكاً حديثاً أفضل، مع تفعيل اكتشاف نوع الملف وتحميل إعدادات الإزاحة الخاصة به.
تفعيل تلوين الصياغة البرمجية
" Turn syntax highlighting on.
syntax on
تمييز الصياغة يجعل قراءة الشيفرة أسرع ويقلّل أخطاء التتبّع البصري، خصوصاً في الملفات الطويلة أو عند التعامل مع أكثر من لغة برمجة.


إظهار أرقام الأسطر وموقع المؤشر
" Add numbers to each line on the left-hand side.
set number

" Highlight cursor line underneath the cursor horizontally.
set cursorline
" Highlight cursor line underneath the cursor vertically.
set cursorcolumn
يساعدك هذان الخياران على تحديد موضع المؤشر بدقة، خاصة عند مراجعة ملفات كبيرة أو جداول نصية طويلة.

أهم الإعدادات اليومية داخل ملف .vimrc
" Set shift width to 4 spaces.
set shiftwidth=4
" Set tab width to 4 columns.
set tabstop=4
" Use space characters instead of tabs.
set expandtab
" Do not save backup files.
set nobackup
" Do not let cursor scroll below or above N number of lines when scrolling.
set scrolloff=10
" Do not wrap lines.
set nowrap
" While searching though a file incrementally highlight matching characters as you type.
set incsearch
" Ignore capital letters during search.
set ignorecase
" Override the ignorecase option if searching for capital letters.
set smartcase
" Show partial command you type in the last line of the screen.
set showcmd
" Show the mode you are on the last line.
set showmode
" Show matching words during a search.
set showmatch
" Use highlighting when doing a search.
set hlsearch
" Set the commands to save in history default number is 20.
set history=1000
هذه الإعدادات تمنحك سلوكاً عملياً في الكتابة والبحث، وتساعد على توحيد التنسيق داخل الملفات، خصوصاً إذا كنت تعمل ضمن فريق تطوير.
تفعيل الإكمال التلقائي بأسلوب مشابه لـ Bash
" Enable auto completion menu after pressing TAB.
set wildmenu
" Make wildmenu behave like similar to Bash completion.
set wildmode=list:longest
" Ignore files with these extensions.
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx
ميزة wildmenu مفيدة عند فتح الملفات أو التنقل بينها بسرعة، كما أن خيار wildignore يبعد عنك الملفات غير المناسبة للتحرير داخل Vim.

للحصول على شرح أي أمر، يمكنك استخدام الصيغة التالية:
:help nocompatible
تنظيم ملف .vimrc باستخدام الطي Folding
كلما زادت إعداداتك، أصبح ملف .vimrc أطول وأكثر تعقيداً. لذلك فإن تقسيمه إلى أقسام قابلة للطي يمنحك رؤية أوضح وسهولة أكبر في الصيانة.
" PLUGINS ---------------------------------------------------------------- {{{
" Plugin code goes here.
" }}}
" MAPPINGS --------------------------------------------------------------- {{{
" Mappings code goes here.
" }}}
" VIMSCRIPT -------------------------------------------------------------- {{{
" This will enable code folding.
augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END
" More Vimscripts code goes here.
" }}}
" STATUS LINE ------------------------------------------------------------ {{{
" Status bar code goes here.
" }}}
بعد الحفظ باستخدام :w، أعد تحميل الملف بالأمر :source ~/.vimrc لتطبيق التغييرات مباشرة دون إغلاق المحرر.
ومن أوامر الطي المفيدة:
zo: فتح الجزء المطوي تحت المؤشر.zc: إغلاق الجزء المطوي تحت المؤشر.zR: فتح جميع الأجزاء المطوية.zM: إغلاق جميع الأجزاء المطوية.

ولمزيد من التفاصيل استخدم :help folding.
إضافة الإضافات إلى Vim عبر مدير الإضافات vim-plug
الإضافات توسّع قدرات Vim بشكل كبير، سواء في استعراض الملفات أو فحص الأخطاء أو تحسين تجربة التطوير اليومية. ولتسهيل إدارة هذه الإضافات، يفضّل استخدام مدير مخصص مثل vim-plug.
تثبيت vim-plug
على Linux أو macOS:
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
على Windows باستخدام Powershell:
$ iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni $HOME/vimfiles/autoload/plug.vim -Force
إضافة قسم الإضافات داخل .vimrc
" PLUGINS ---------------------------------------------------------------- {{{
call plug#begin('~/.vim/plugged')
call plug#end()
" }}}
أي إضافة جديدة تضعها بين call plug#begin() وcall plug#end().
أمثلة عملية على تثبيت إضافات شائعة
" PLUGINS ---------------------------------------------------------------- {{{
call plug#begin('~/.vim/plugged')
Plug 'dense-analysis/ale'
Plug 'preservim/nerdtree'
call plug#end()
" }}}
في هذا المثال:
ALEتساعد في فحص الشيفرة وإظهار التنبيهات.NERDTreeتضيف متصفح ملفات عملياً داخل المحرر.
بعد حفظ الملف وإعادة تحميله بواسطة :source ~/.vimrc، شغّل الأمر التالي لتنزيل الإضافات وتثبيتها:
:PlugInstall

تخصيص اختصارات لوحة المفاتيح في Vim
الاختصارات أو Mappings من أهم عناصر التخصيص في Vim، لأنها تقلل عدد الضغطات وتختصر الأوامر المتكررة إلى حركات بسيطة وسريعة.
صيغة كتابة الاختصارات
map_mode <what_you_type> <what_is_executed>
أشهر أوضاع التعيين
nnoremap: لتعيين اختصارات في الوضع العادي.inoremap: لتعيين اختصارات في وضع الإدراج.vnoremap: لتعيين اختصارات في الوضع المرئي.
ومن الأمثلة الشائعة تحويل jj إلى مفتاح Esc للخروج السريع من وضع الإدراج:
inoremap jj <Esc>
استخدام المفتاح القائد <leader>
يسمح لك mapleader باختيار مفتاح أساسي غير مستغل في Vim لربط اختصاراتك الخاصة. المفتاح الافتراضي غالباً هو الشرطة العكسية، لكن كثيراً من المستخدمين يغيّرونه إلى الفاصلة أو أي مفتاح مريح.
let mapleader = "\"
مثال على استخدامه لإلغاء تمييز نتائج البحث:
nnoremap <leader>\ :nohlsearch<CR>
مجموعة اختصارات عملية جاهزة
" MAPPINGS --------------------------------------------------------------- {{{
" Set the backslash as the leader key.
let mapleader = "\"
" Press \\ to jump back to the last cursor position.
nnoremap <leader>\ ``
" Press \p to print the current file.
nnoremap <silent> <leader>p :%w !lp<CR>
" Type jj to exit insert mode quickly.
inoremap jj <Esc>
" Press the space bar to type the : character in command mode.
nnoremap <space> :
" Open a new line below or above, then exit insert mode.
nnoremap o o<esc>
nnoremap O O<esc>
" Center the cursor when moving between search results.
nnoremap n nzz
nnoremap N Nzz
" Yank from cursor to end of line.
nnoremap Y y$
" Run current Python file with F5.
nnoremap <f5> :w <CR>:!clear <CR>:!python3 % <CR>
" Easier split navigation.
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-h> <c-w>h
nnoremap <c-l> <c-w>l
" Resize split windows.
noremap <c-up> <c-w>+
noremap <c-down> <c-w>-
noremap <c-left> <c-w>>
noremap <c-right> <c-w><
" NERDTree toggle.
nnoremap <F3> :NERDTreeToggle<cr>
" Ignore files in NERDTree.
let NERDTreeIgnore=['\.git$', '\.jpg$', '\.mp4$', '\.ogg$', '\.iso$', '\.pdf$', '\.pyc$', '\.odt$', '\.png$', '\.gif$', '\.db$']
" }}}
هذه الأمثلة لا تمثل قواعد ثابتة، بل نقطة انطلاق جيدة. الأفضل دائماً أن تبني اختصارات تناسب عاداتك الفعلية أثناء العمل.
وللتوسع يمكنك استخدام :help map-modes.
إضافة أوامر ذكية باستخدام Vimscript
لغة Vimscript تتيح لك بناء منطق مخصص داخل المحرر، مثل تشغيل أوامر تلقائية عند فتح نوع معين من الملفات أو عند تبديل النوافذ أو عند تشغيل النسخة الرسومية من Vim.
" VIMSCRIPT -------------------------------------------------------------- {{{
" Enable the marker method of folding.
augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END
" If the current file type is HTML, set indentation to 2 spaces.
autocmd Filetype html setlocal tabstop=2 shiftwidth=2 expandtab
" If Vim version is equal to or greater than 7.3 enable undofile.
if version >= 703
set undodir=~/.vim/backup
set undofile
set undoreload=10000
endif
" Display cursorline and cursorcolumn only in active window.
augroup cursor_off
autocmd!
autocmd WinLeave * set nocursorline nocursorcolumn
autocmd WinEnter * set cursorline cursorcolumn
augroup END
" GUI-specific settings.
if has('gui_running')
set background=dark
colorscheme molokai
set guifont=Monospace\ Regular\ 12
set guioptions-=T
set guioptions-=L
set guioptions-=r
set guioptions-=m
set guioptions-=b
nnoremap <F4> :if &guioptions=~#'mTr'<Bar> \set guioptions-=mTr<Bar> \else<Bar> \set guioptions+=mTr<Bar> \endif<CR>
endif
" }}}
ماذا يضيف هذا الجزء عملياً؟
- تفعيل الطي تلقائياً عند تعديل ملفات
vim. - ضبط الإزاحة إلى مسافتين عند تحرير ملفات
HTML. - تفعيل
undofileللاحتفاظ بسجل التراجع حتى بعد حفظ الملف وإغلاقه. - إظهار تمييز السطر والعمود في النافذة النشطة فقط لتقليل التشويش البصري.
- تخصيص النسخة الرسومية من
Vimمن حيث الألوان والخط وعناصر الواجهة.
للتعمق في هذا الجانب، يفيدك الرجوع إلى :help autocmd وقراءة مراجع متخصصة في Vimscript.
إضافة قوالب ألوان Color Schemes إلى Vim
اختيار ألوان مناسبة لا يغيّر الشكل فقط، بل يؤثر في الراحة البصرية وسرعة قراءة الشيفرة. لذلك يعتمد كثير من المطورين على قوالب ألوان مخصصة بدلاً من الإعداد الافتراضي.
يمكنك تثبيت أي قالب ألوان بوضع ملف .vim الخاص به داخل المسار ~/.vim/colors/. المثال التالي يثبت قالب molokai الشهير:
$ cd ~/.vim/colors
$ curl -o molokai.vim https://raw.githubusercontent.com/tomasr/molokai/master/colors/molokai.vim
ولتفعيل القالب داخل المحرر:
:colorscheme molokai

من المفيد تجربة أكثر من قالب حتى تصل إلى التوازن المناسب بين التباين والوضوح وراحة العين.
تخصيص شريط الحالة Status Line في Vim
شريط الحالة ليس مجرد عنصر شكلي، بل مساحة تعرض لك بيانات مهمة أثناء التحرير، مثل مسار الملف ونوعه وموقع المؤشر ونسبة التقدم داخل المستند.
" STATUS LINE ------------------------------------------------------------ {{{
" Clear status line when vimrc is reloaded.
set statusline=
" Status line left side.
set statusline+=\ %F\ %M\ %Y\ %R
" Use a divider to separate the left side from the right side.
set statusline+=%=
" Status line right side.
set statusline+=\ ascii:\ %b\ hex:\ 0x%B\ row:\ %l\ col:\ %c\ percent:\ %p%%
" Show the status on the second to last line.
set laststatus=2
" }}}
شرح أهم الرموز المستخدمة
%F: يعرض المسار الكامل للملف الحالي.%M: يوضح ما إذا كان الملف قد عُدّل ولم يُحفظ بعد.%Y: يعرض نوع الملف الحالي.%R: يشير إلى أن الملف للقراءة فقط إن وُجد.%b: يعرض قيمة المحرف الحالي بصيغةASCIIأوUnicode.0x%B: يعرض القيمة الست عشرية للمحرف.%l: رقم السطر الحالي.%c: رقم العمود الحالي.%p%%: نسبة موضع المؤشر من أعلى الملف.

إذا رغبت في توسيع هذا الجزء أكثر، راجع :help statusline.
ملف .vimrc كامل كنقطة بداية عملية
إذا كنت تريد نسخة أولية متكاملة يمكنك البناء عليها، فإليك نموذجاً كاملاً يجمع معظم العناصر السابقة:
" Disable compatibility with vi which can cause unexpected issues.
set nocompatible
filetype on
filetype plugin on
filetype indent on
syntax on
set number
set cursorline
set cursorcolumn
set shiftwidth=4
set tabstop=4
set expandtab
set nobackup
set scrolloff=10
set nowrap
set incsearch
set ignorecase
set smartcase
set showcmd
set showmode
set showmatch
set hlsearch
set history=1000
set wildmenu
set wildmode=list:longest
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx
" PLUGINS ---------------------------------------------------------------- {{{
call plug#begin('~/.vim/plugged')
Plug 'dense-analysis/ale'
Plug 'preservim/nerdtree'
call plug#end()
" }}}
" MAPPINGS --------------------------------------------------------------- {{{
let mapleader = "\"
nnoremap <leader>\ ``
nnoremap <silent> <leader>p :%w !lp<CR>
inoremap jj <Esc>
nnoremap <space> :
nnoremap o o<esc>
nnoremap O O<esc>
nnoremap n nzz
nnoremap N Nzz
nnnoremap Y y$
nnoremap <f5> :w <CR>:!clear <CR>:!python3 % <CR>
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-h> <c-w>h
nnoremap <c-l> <c-w>l
noremap <c-up> <c-w>+
noremap <c-down> <c-w>-
noremap <c-left> <c-w>>
noremap <c-right> <c-w><
nnoremap <F3> :NERDTreeToggle<cr>
let NERDTreeIgnore=['\.git$', '\.jpg$', '\.mp4$', '\.ogg$', '\.iso$', '\.pdf$', '\.pyc$', '\.odt$', '\.png$', '\.gif$', '\.db$']
" }}}
" VIMSCRIPT -------------------------------------------------------------- {{{
augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END
autocmd Filetype html setlocal tabstop=2 shiftwidth=2 expandtab
if version >= 703
set undodir=~/.vim/backup
set undofile
set undoreload=10000
endif
augroup cursor_off
autocmd!
autocmd WinLeave * set nocursorline nocursorcolumn
autocmd WinEnter * set cursorline cursorcolumn
augroup END
if has('gui_running')
set background=dark
colorscheme molokai
set guifont=Monospace\ Regular\ 12
set guioptions-=T
set guioptions-=L
set guioptions-=r
set guioptions-=m
set guioptions-=b
nnoremap <F4> :if &guioptions=~#'mTr'<Bar> \set guioptions-=mTr<Bar> \else<Bar> \set guioptions+=mTr<Bar> \endif<CR>
endif
" }}}
" STATUS LINE ------------------------------------------------------------ {{{
set statusline=
set statusline+=\ %F\ %M\ %Y\ %R
set statusline+=%=
set statusline+=\ ascii:\ %b\ hex:\ 0x%B\ row:\ %l\ col:\ %c\ percent:\ %p%%
set laststatus=2
" }}}
نصائح عملية لجعل ملف .vimrc أكثر قابلية للصيانة
- ابدأ بإعدادات قليلة ثم أضف ما تحتاجه فعلاً مع الوقت.
- قسّم الملف إلى أقسام واضحة باستخدام تعليقات وعلامات الطي.
- اختبر كل تعديل على حدة، ثم أعد التحميل بواسطة
:source ~/.vimrc. - تجنب تثبيت إضافات كثيرة بلا حاجة، لأن ذلك قد يؤثر في سرعة الإقلاع.
- دوّن سبب كل تعيين أو خيار مهم داخل تعليق مختصر ليسهل الرجوع إليه لاحقاً.
الخلاصة التقنية
تخصيص Vim عبر ملف .vimrc ليس رفاهية، بل استثمار مباشر في سرعة العمل ودقته. الإعدادات الأساسية تمنحك بيئة مستقرة، والاختصارات تقلل الجهد المتكرر، وVimscript يفتح الباب للأتمتة الذكية، بينما تجعل الإضافات وشريط الحالة التجربة أكثر اكتمالاً. الأفضل تقنياً هو بناء ملف بسيط ومنظم وقابل للتوسع، بدلاً من نسخ إعدادات ضخمة لا تفهم تفاصيلها. كل سطر تضيفه إلى .vimrc ينبغي أن يخدم استخدامك الحقيقي ويجعل المحرر أقرب إلى أسلوبك في الإنجاز.