ටැබ් යතුර == අවකාශ 4 ක් සහ Vim හි කැරලි වරහන් පසු ස්වයංක්‍රීයව ඇතුල් කරන්න


1277

මම කොහොමද දන්නෙ නෑ vi - විම් (! ටැබ් කිරීමට අවකාශ පරිවර්තනය, නරක) ටැබ් භාවිතා කවදාවත්, සඟල වරහන කුට්ටි පසු ටැබ් යතුර == 4 අවකාශ සහ ස්වයංක්රීයව එබුම කේතය කරයි වගේ හැරදමයි කරන්නේ?

එසේම, මෙම සැකසීම් නැවත සුරැකිය යුත්තේ කෙසේද?

මේ හා සම්බන්ධ වෙනත් ප්‍රශ්න මම දැක ඇත්තෙමි, නමුත් එය සෑම විටම මට අවශ්‍ය දෙයින් ටිකක් off ත් වී ඇති බව පෙනේ.


Answers:


1897

පහත පිළිතුරු කිහිපයකින් පෙන්වා දී ඇති පරිදි, දැන් වඩාත් කැමති ක්‍රමය වන්නේ ස්මාර්ට්ඩෙන්ඩන්ට් භාවිතා කිරීම නොවේ, ඒ වෙනුවට පහත සඳහන් දෑ භාවිතා කරන්න (ඔබේ .vimrc හි ):

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

ඔබගේ .vimrc: ගොනුවේ:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

උදව් ලිපිගොනු පුරුදු වීමට මඳ වේලාවක් ගත වේ, නමුත් ඔබ වැඩි වැඩියෙන් කියවන විට වඩා හොඳ Vim ලැබේ:

:help smartindent

ඊටත් වඩා හොඳයි, අතේ ගෙන යා හැකි බව සඳහා මෙම සැකසුම් ඔබේ ප්‍රභවයට ඇතුළත් කළ හැකිය:

:help auto-setting

ඔබගේ වර්තමාන සැකසුම් බැලීමට:

:set all

අළු පැහැයෙන් දැක්වෙන පරිදි , ස්මාර්ට් ඉන්ඩෙන්ට් වෙනුවට සින්ඩෙන්ට් ආදේශ කර ඇති අතර එය "වඩාත් දක්ෂ ලෙස ක්‍රියා කරයි", නමුත් තවමත් ප්‍රධාන වශයෙන් සී වැනි වාක්‍ය ඛණ්ඩ සහිත භාෂාවන් සඳහා:

:help C-indenting


4
ඔබ සතුව පුළුල් කිරීමේ කට්ටලයක් තිබේ නම් එය අවකාශයන් භාවිතා කළ යුතුය. ඔබත් "අනුකූලතාව" සකසනවාද? එය "ඕෆ්" හි පෙරනිමිය වෙත එක්ස්පෑන්ඩ් ටැබ් යළි පිහිටුවීම ඇතුළු විවිධ අතුරු ආබාධ ඇති කරයි
කෙන්

60
කණගාටුයි, නමුත් ස්මාර්ට් ඉන්ඩෙන්ට් වෙනුවට සින්ඩෙන්ට් ආදේශ කර ඇති අතර එය සුදුසු වන්නේ සී-ස්ටයිල් සින්ටැක්ස් සඳහා පමණි. වෙනත් භාෂාවන් සමඟ වැඩ කිරීමේදී ඔබගේ vimrc එක සක්‍රිය කිරීම ගැටළුවක් විය හැකිය. ඒ වෙනුවට "filetype indent on" භාවිතා කරන්න.
අළු

2
හොඳයි, smartindent වේ සී-ශෛලිය කාරක රීති පමණක් හා සාරභූත ප්රතික්ෂේප කරයි.
අළු

4
මම එක්ස්පෑන්ඩ් ටැබ් සක්‍රීය කළහොත්, කෙසේ හෝ පෙළෙහි ටැබ් අක්‍ෂරය සත්‍ය වශයෙන්ම ඇතුළත් කිරීමට ක්‍රමයක් තිබේද?
ඩැනියෙල් සෙගටෝ

3
An ඩැනියෙල්සෙගාටෝ <ctrl v> <tab> ඇතුළු කිරීමේ මාදිලියේ වැඩ කළ යුතුය: stackoverflow.com/questions/4781070/…
කෙන්

239

අදාළ, ඔබ ටැබ් සහ අවකාශ දෙකම භාවිතා කරන ගොනුවක් විවෘත කරන්නේ නම්, ඔබට ලැබී ඇතැයි උපකල්පනය කරන්න

set expandtab ts=4 sw=4 ai

ඔබට සියලුම ටැබ් මුළු ගොනුවේ ඇති අවකාශයන් සමඟ ප්‍රතිස්ථාපනය කළ හැකිය

:%retab

10
FYI, ඔබේ ටැබ් එක අවකාශයෙන් ප්‍රතිස්ථාපනය කිරීමට ඔබට අවශ්‍ය නැතිනම්, පුළුල් කිරීමේ රේඛාව ඉවත් කරන්න.
ඉනෝ

6
ටැබ් සුදු අවකාශය නොවේද? ;-)
රොබ් වෙල්ස්

11
@ රොබ්-වෙල්ස්: මම "හිස් අවකාශය" "අවකාශ" ලෙස වෙනස් කළෙමි. ඔබට සතුටුයිද දැන්? ;-)
නෙට්ජෙෆ්

එම පළමු පේළියේ තේරුම ඔබට පැහැදිලි කළ හැකිද?
අරමුදල් මොනිකාගේ නඩුව

2
ටැබ් අවකාශයට විස්තාරණය කරන්නේද යන්න පුළුල් ටැබ් විසින් තීරණය කරයි. ts = tabstop = ගොනුවේ <Tab> සඳහා ඇති අවකාශ ගණන. sw = shiftwidth = (ස්වයංක්‍රීය) ඉන්ඩෙන්ට් හි එක් එක් පියවර සඳහා භාවිතා කළ යුතු අවකාශ ගණන. ai = autoindent = නව පේළියක් ආරම්භ කිරීමේදී වත්මන් රේඛාවෙන් ඉන්ඩෙන්ට් පිටපත් කරන්න.
mcmacerson

90

filetype plugin indent onගොනු ටයිප් -විශේෂිත ඉන්ඩෙන්ටේෂන් ලබා ගැනීමට ඇති හොඳම ක්‍රමය ඔබේ vimrc හි භාවිතා කිරීමයි. එවිට ඔබට set sw=4 sts=4 et.vim / ftplugin / c.vim වැනි දෑ නියම කළ හැකිය , නිදසුනක් ලෙස, සියලුම ලිපිගොනු සංස්කරණය කිරීම සඳහා එම ගෝලීය බවට පත් නොකරමින් සහ අනෙකුත් සී නොවන සින්ටැක්ස් නිවැරදිව මුද්‍රණය කරනු ලැබේ (ලිප්ස් පවා) .


9
IMHO, නිවැරදි ලෙස සලකුණු කර ඇති පිළිතුරට වඩා හොඳයි. සින්ඩෙන්ට් සහ ස්මාර්ට් ඉන්ඩෙන්ට් යන සුපර්සෙඩ්ස් මත ගොනු ටයිප් ඉන්ඩෙන්ට්.
0fnt

63

බොහෝ ලිපිගොනු වල 4-අවකාශ පටිති, මේක්ෆයිල්ස් හි සැබෑ 8-පළල ටැබ් වර්‍ගය සහ සී / සී ++ ඇතුළු විවිධ ලිපිගොනු වල ස්වයංක්‍රීයව ඇතුල් කිරීම සඳහා මෙය ඔබේ ~/.vimrcගොනුවට දමන්න :

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on

    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif

" For everything else, use a tab width of 4 space chars.
set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.
set shiftwidth=4    " Indents will have a width of 4.
set softtabstop=4   " Sets the number of columns for a TAB.
set expandtab       " Expand TABs to spaces.

ඔබට අවශ්‍ය නොවන්නේ ඇයි else? අන්තිම පේළි සෑම අවස්ථාවකදීම
Makefile

6
හායි @lucidbrot, “autocmd FileType make” ප්‍රකාශය මූලික වශයෙන් vim හට Makefile විවෘත කරන සෑම විටම භාවිතා කිරීමට සමහර සැකසුම් වලට පවසයි. එහි පහළ පේළි පෙරනිමි සකසයි. වෙනත් වචන වලින් කිවහොත්, ගොනුව විවෘත කළ විට "ටැබ්ස්ටොප් = 8 ..." සැකසුම් පසුව යෙදෙන අතර ආරම්භයේදී අදාළ වන "ටැබ්ස්ටොප් = 4 ..." සැකසුම් නැවත ලියයි.
ෂර්වින් ඉමාමි

57

උබුන්ටු වැනි බොහෝ ලිනක්ස් පද්ධති වල .vimrcගොනුව පෙරනිමියෙන් නොපවතින බැවින් ඔබ එය පළමුව නිර්මාණය කිරීම රෙකමදාරු කරනු ලැබේ.

.viminfoනිවාස නාමාවලියෙහි ඇති ගොනුව භාවිතා නොකරන්න . එය වෙනත් අරමුණක් සඳහා භාවිතා වේ.

පියවර 1: ඔබේ නිවාස නාමාවලියට යන්න

cd ~

පියවර 2: ගොනුව සාදන්න

vim .vimrc

පියවර 3: ඉහත සඳහන් වින්‍යාසය එක් කරන්න

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

පියවර 3: Shift+ එබීමෙන් ගොනුව සුරකින්න ZZ.


12
Shift + ZZඑය භාවිතා නොකරන්න .swp ගොනුව නිර්මාණය කරයි. භාවිතය wq.
ෂාස්

7
hashas: "ZZ" යනු ": x" ට සමාන වන අතර එය ": wq" ට සමාන වේ, එය ඉතිරි කරන්නේ ගොනුව වෙනස් කර ඇත්නම් පමණි ... ( Ctrl-Zතවත් කතාවකි ...)
ගර්ට් වෑන් ඩෙන් බර්ග්

1
එය හුදෙක් අසත්‍යයකි. සංස්කරණ සැසියක් සඳහා ඔබට swap ගොනුවක් අවශ්‍ය නොවන්නේ නම්, ඔබ ධාවනය කළ vim -n <file>යුතුය. හුවමාරු ගොනුවක් යනු ඉතිරි කරන වේලාවේදී ජනනය කරන දෙයක් නොවේ; හදිසියේම අවසන් කරන ලද සංස්කරණ සැසි නැවත ලබා ගැනීමට swap ලිපිගොනු ප්‍රයෝජනවත් වන බැවින් එය එහි අරමුණ බොහෝ දුරට පරාජය කරනු ඇත.
Kaz

33

නිර්දේශිත ක්‍රමය වන්නේ ගොනු වර්ගය පදනම් කරගත් ඉන්ඩෙන්ටේෂන් භාවිතා කිරීම සහ එය ප්‍රමාණවත් නොවන්නේ නම් පමණක් ස්මාර්ට් ඉන්ඩෙන්ට් සහ සින්ඩෙන්ට් භාවිතා කිරීමයි.

ඔබගේ .vimrc වෙත පහත සඳහන් දෑ එක් කරන්න

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

එය වෙනස් පිළිතුරක් ලෙස උපකාරී වේ යැයි සිතමු.




7

ස්වයංක්‍රීය ඉන්ඩෙන්ට් එක වර්තමාන සින්ටැක්ස් ප්‍රකාරය මත පදනම් වේ. මම දන්නවා ඔබ Foo.java සංස්කරණය කරන්නේ නම්, a ට {ඇතුළු Enterවී පහත දැක්වෙන පේළියට ඇතුල් කරන්න.

ටැබ් සඳහා, සැකසුම් දෙකක් තිබේ. Vim තුළ, කොලන් එකක් ටයිප් කර "tabstop = 4" සකසන්න, එමඟින් ටැබ් අවකාශ හතරක් ලෙස පෙන්වනු ඇත. නැවත මහා බඩවැලට පහර දී "set expandtab" ටයිප් කරන්න, එය ටැබ් සඳහා අවකාශය ඇතුල් කරයි.

ඔබට මෙම සැකසුම් ඔබගේ නිවාස නාමාවලියෙහි .vimrc (හෝ වින්ඩෝස් හි _vimrc) තුළ තැබිය හැකිය, එබැවින් ඔබට ඒවා එක් වරක් පමණක් ටයිප් කළ යුතුය.


0

අෆ්ටෙරෝල්, ඔබට .vimrc සංස්කරණය කළ හැකිය, පසුව conf එකතු කරන්න

set tabstop=4

නැතහොත් විධානය ක්‍රියාත්මක කරන්න


-1

පළමුවෙන්ම, Tabඅත්පොතෙහි ඇතුළත් කිරීම සඳහා Vim හි යතුර භාවිතා නොකරන්න . Vim සතුව ඇතුළත් කිරීමේ ප්‍රකාරයේදී විධාන යුගලයක් ඇත. එම විධානයන් Ctrl-Tසහ Ctrl-D. මෙම විධානයන් වටිනාකම් නිරීක්ෂණය tabstop, shiftwidthසහ expandtab, සහ හිස් තැන් සහ ටැබ්ලට් පරිගණක නිවැරදි මිශ්රණය (හිස් තැන් ඕනෑම අවශ්ය අංකය සඳහන් ටැබ් උපරිම සංඛ්යාව) පවත්වාගෙන යාම.

දෙවනුව, ඔබ ස්වයංක්‍රීය ඉන්ඩෙන්ටේෂන් භාවිතා කරන්නේ නම් මෙම අත්පොත ඉන්ඩෙන්ටින් යතුරු කෙසේ හෝ භාවිතා කළ යුතු නොවේ.

ඔබට කරදර කරනවා Ctrl-Tවෙනුවට Tab, ඔබට එය නැවත සකස් කළ හැකිය:

:imap <Tab> ^T

දඩබ්බරයා Shift-Tabකිරීමට ඔබට නැවත සකස් කළ හැකිය Ctrl-D:

:imap <S-Tab> ^D

මෙහි ^ T සහ ^ D යනු වචනාර්ථයෙන් පාලනය කළ හැකි අක්ෂර Ctrl-VCtrl-Tවේ.

මෙම සිතියම්ගත කිරීම ක්‍රියාත්මක වන විට, ඔබට තවමත් භාවිතයෙන් ටැබ් එක බෆරයට ටයිප් කළ හැකිය Ctrl-VTab. ඔබ මෙය කරන්නේ :set expandtabනම්, සක්‍රියව පැවතුනද, ඔබට පුළුල් නොකළ ටැබ් චරිතයක් ලැබෙන බව සලකන්න.

<Tab>සිතියමට සමාන බලපෑමක් උපයෝගී කරගනිමින් :set smarttabරේඛාවක් ඉදිරිපස පිටුපස අවකාශය බුද්ධිමත් ලෙස හැසිරීමට හේතු වේ.

smarttabමාදිලියේ දී , Tabරේඛාවක් ආරම්භයේ දී භාවිතා නොකරන විට එයට විශේෂ අර්ථයක් නැත. එය මා ඉහත සිතියම් ගත Tabකිරීමට වඩා වෙනස් ය Ctrl-T, මන්ද යත් Ctrl-Tඕනෑම තැනක (ඇතුළු කිරීමේ මාදිලියේ) භාවිතා කිරීම එම රේඛාවේ ඉන්ඩෙන්ටේෂන් වැඩි කරයි.

වෙනත් ප්‍රයෝජනවත් සිතියම් විය හැක්කේ:

:map <Tab> >
:map <S-Tab> <

දැන් අපට පේළි කිහිපයක් තෝරාගෙන Tabඒවා උඩින් ඇලවීම වැනි දේ කළ හැකිය . නැතහොත් Tabපේළියක දෙවරක් පහර දෙන්න (විධාන ප්‍රකාරයේදී) එහි ඉන්ඩෙන්ටේෂන් වැඩි කරන්න.

ඔබ නිසි එබුම කළමනාකරණය විධාන භාවිතා කරන්නේ නම්, ඒ සියල්ල ම පරාමිතීන් තුන මඟින් පාලනය කෙරේ: shiftwidth, tabstopසහ expandtab.

මෙම shiftwidthපරාමිතිය ඔබේ එබුම ප්රමාණය පාලනය කරයි; ඔබට අභ්යවකාශ ඉන්ඩෙන්ට් හතරක් අවශ්ය නම්, භාවිතා කරන්න :set shiftwidth=4, හෝ කෙටියෙන් :set sw=4.

මෙය පමණක් සිදු කරන්නේ නම්, අවකාශය සහ ටැබ් මිශ්‍රණයක් භාවිතයෙන් ඉන්ඩෙන්ටේෂන් නිර්මාණය වනු ඇත, මන්ද noexpandtabඑය පෙරනිමිය වේ. භාවිතා කරන්න :set expandtab. මෙය ඔබ බෆරයට ටයිප් කරන ටැබ් අක්ෂර අවකාශයන් දක්වා ව්‍යාප්ත වීමට හේතු වන අතර Vim- කළමනාකරණය කළ ඉන්ඩෙන්ටේෂන් අවකාශයන් පමණක් භාවිතා කරයි.

ක්‍රියාත්මක වන විට expandtab, සහ නිසි Vim යාන්ත්‍රණයන් හරහා ඔබේ ඉන්ඩෙන්ටේෂන් කළමනාකරණය කරන්නේ නම්, එහි වටිනාකම අදාල tabstopනොවේ. ගොනුවේ ටැබ් සිදුවන්නේ නම් එය පාලනය වන ආකාරය එය පාලනය කරයි. ඔබ සතුව set tabstop=8 expandtabදෘඩ ටැබ් එකක් භාවිතා කර ගොනුව තුළට රිංගා ඇත්නම් Ctrl-VTab, එය සුපුරුදු පරිදි ඊළඟ තීරු 8 මත පදනම් වූ ටැබ් ස්ථානයට පෙළගැස්වීමක් ඇති කරයි.


ඔබගේ සියලු සිතියම්වල පුනරාවර්තන නොවන ප්‍රභේද භාවිතා කළ යුතුය. සිතියම් <C-t>ගත කිරීම වචනානුසාරයෙන් නොව එම වාක්‍ය ඛණ්ඩය භාවිතා කළ හැකිය. අවසාන වශයෙන්, <Tab>සාමාන්‍ය මාදිලියේ සිතියම්ගත කිරීම ද සිතියම් ගත කරනු ඇත <C-i>(ඒවා එකම චරිතයකි), එබැවින් මම ඔබට එය නිර්දේශ නොකරමි (ඔබට ඉතා සුළු ක්‍රියාකාරීත්වයක් නැති වේ
ඩී. බෙන් නොබෙල්

@ D.BenKnoble මම මේ කිසිවක් නිර්දේශ නොකරමි; මම Ctrl-T, Ctrl-D, සහ <> මා භාවිතා කරමි. එය අපේක්ෂිත පරිදි Vim භාවිතා කරයි. වෙනත් සංස්කාරකවරුන් තුළ ටැබ් භාවිතා කිරීමට මිනිසුන් කැමති නොවනු ඇත, එපමණයි.
Kaz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.