انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۵٫۰۴ اوبونتو منتشر شد 🎉

آخرین ارسال‌ها

صفحه: 1 [2] 3 4 ... 10
11
برنامه‌سازی / پاسخ : کتاب Unix: A History and a Memoir
« آخرین ارسال توسط esmaeelE 12 تیر 1404، 11:00 ق‌ظ »
در فصل پنجم صفحه ۸۸ می‌خوانیم:

The control flow syntax of the new shell was unusual, since it was based on Algol 68, a language favored by Steve though not many others in 1127.

For example, Algol 68 used reversed words as terminators, like `fi` to terminate if and `esac` to terminate case. But since `od` was already take (for the octal dump command), `do` was terminated by `done`.


ساختار نحوی کنترل اجرای جریان برنامه در پوسته جدید(bourne shell) بر اساس کلمات کلیدی زبان Algol 68 و غیر معمول بود.

این روش اگرچه پسند نویسنده آن (Steve Bourne) بود اما در بین سایر اعضای گروه 1127 چندان محبوب نبود.

برای نمونه در زبان Algol 68 از معکوس واژه‌ها برای اتمام یک بلوک استفاده می‌شد.

مثلا fi برای اتمام if و esac برای case.
از آنجایی که عبارت od هم اکنون به برنامه octal dump اختصاص داشت برای اتمام بلوک  do‍ از واژه done استفاده کردند.

12
معرفی نرم‌افزار / پاسخ : جایگزین google keep
« آخرین ارسال توسط milad.fashi 12 تیر 1404، 12:20 ق‌ظ »
سرویس های رایگان نکست کلود به شدت کنده.اصلا قابل قیاس با گوگل درایو لامصب نیست
تنها راه داشتن سرعت گوگل درایو خرید vps سریع یا نصب نکست کلود بر روی رایانه شخصیه !؟ مثلا برد رزبری پای !؟
13
نرم‌افزارهای اینترنتی / پاسخ : راه حلی با اتصال به T.O.R
« آخرین ارسال توسط abc 11 تیر 1404، 09:57 ق‌ظ »
نقل‌قول
آیا بعد از اضافه کردن پل، خدمت تور را راه‌اندازی مجدد کردی؟ البته بعد از راه‌اندازی مجدد خدمت تور باید یکم صبر کنی.
خیلی پیگیر نشدم. ولی مشکل اینجوری بود. اگر در torrc پل‌های obfs4proxy می‌گذاشتم با راه‌اندازی سرویس پیشفرض تور کار می‌کرد ولی اگر snowflake می‌گذاشتم متصل نمی‌شد (خطا نمی‌داد ولی اصلا متصل نمی‌شد. لاگ‌ها را بررسی که می‌کردم می‌دیدم که دارد تلاش می‌کند متصل شود ولی ارتباط‌ها رد می‌شدند و اتصالی صورت نمی‌گرفت). بعد همین torrc را به صورت دستی اجرا می‌کردم سریع متصل می‌شد. یعنی اینجوری:
tor -f /etc/tor/torrc
برای همین سرویس پیشفرض تور را غیرفعال کردم و به جای آن در مسیر /etc/systemd/system یک سرویس ساده ساختم و فعلا با این سرویس کار می‌کند و چون در حال حاضر به خوبی کار می‌کند دیگر تلاشی برای حل مشکل اولیه نکردم.
14
معرفی نرم‌افزار / پاسخ : جایگزین google keep
« آخرین ارسال توسط 🇬🇧بریتانیای کبیر🇬🇧 11 تیر 1404، 07:46 ق‌ظ »
سلام!
فکر کنم که یه چیزی یادم بیاد: فکر کنم نکست کلاود چی بهش میگن (اصطلاحش رو یادم رفته) ولی یه جورایی مثل ماستادون و... بشه ازش نمونه ساخت. (مطمئن نیستم)

nextcloud یک خدمت آزاده. از هر خدمت آزادی میشه نمونه ساخت.  از خیلی چیزا میشه نمونه ساخت، تفاوت اصلی ماستادون در  این که هم میشه ازش نمونه ساخت و هم نمونه هاش میتونن با هم ارتباط باشن و شبکش نامتمرکزه. البته nextcloud برای پیام رسانی نیست و نیازی به این نداره. نمیدیدونم شایدم همین الآن هم این ویژگی رو داره!
15
البته با سرویس پیشفرض تور (در دبیان) اتصال برقرار نمی‌شد (نفهمیدم چرا و خیلی هم پیگیر نشدم). خودم یک سرویس ساختم و با آن کار می‌کند

آیا بعد از اضافه کردن پل، خدمت تور را راه‌اندازی مجدد کردی؟ البته بعد از راه‌اندازی مجدد خدمت تور باید یکم صبر کنی. و البته جلوی خط دوم بهتره خط زیری رو هم بذاری
-log /var/log/tor/snowflake-client.log
بعد از راه‌اندازی دوباره خدمت تور، پرونده‌ی گذارشات را بخوان، اگه تو دو خط اول کلمه Started رو دیدی شروع به کار کرده و فقط باید صبر کنی تا وصل شه. شاید کمی طول بکشه.


من برای تور از شیوه‌نامه webtunnel استفاده میکنم(برای من سریع تره) ولی حتی وقتی خدمتشو دوباره راه‌اندازی میکرم باز کار نمیکرد که فهمیدم باید به خدمت تور دسترسی به پرونده‌ی کارخواه webtunnel رو بدم. در زیر مطرحش کردم که البته خودم جوابو پیدا کردم.

https://askubuntu.com/questions/1552027/how-to-use-webtunnel-bridge-with-tor-service/1552057#1552057
16
کلا کار این چینی ها زرنگ بازی
من گوشی ام شیاومی نوت ۱۲ پرو بود.خواستم lineage os نصب کنم نوشته بود فقط note 10 pro رو پشتیبانی میکنه!
منم حالم گرفت.حتی به فکر تعویض گوشی افتادم.اخرش با کمی تحقیق و بررسی متوجه شدم تو گوشی شیاومی code name  مهمه نه مدل گوشی.چون شیاومی پدرسوخته میاد تو خاورمیانه و جنوب آفریقا همون نوت ۱۰ پرو رو کمی تغییر میده و با عنوان نوت ۱۲ پرو عرضه میکنه تا یه سودی هم ببره بدون طراحی soc جدید.هر دوی این گوشی ها پدازنده شون snapdragon 732g هستش و sweet هستند.
حالا با این اوصاف من میتونم همون ورژن note 10 پرو رو بر روی گوشی نوت ۱۲ پرو ام نصب کنم.چون پردازنده یکسان و کدنام یکسان sweet  رو دارند
ایا موفق میشوم آنلاک ش کنم !؟
17
معرفی نرم‌افزار / پاسخ : جایگزین google keep
« آخرین ارسال توسط milad.fashi 11 تیر 1404، 01:52 ق‌ظ »
شاید اشتباه ازمن بود nextcloud الان فیلتر نیست
18
نرم‌افزارهای اینترنتی / پاسخ : راه حلی با اتصال به T.O.R
« آخرین ارسال توسط abc 10 تیر 1404، 10:30 ب‌ظ »
نقل‌قول
بعد از صلح خیلی از ابزارهای عبور از فیلترینگ دوباره فعال شدند ولی هنوز با سرعت پایین و قطع و وصلی
کلا انگار پهنای باند بین‌الملل را کاهش داده‌اند. من در یک سرور ایرانی می‌خواستم یک بسته را از مخزن رسمی دبیان نصب کنم. سرعت دریافت حدودا ۳۵ کلیوبایت بود :( تازه کلی هم اختلال داشت.
19
نرم‌افزارهای اینترنتی / پاسخ : راه حلی با اتصال به T.O.R
« آخرین ارسال توسط abc 10 تیر 1404، 10:19 ب‌ظ »
من با snowflake می‌تونم به شبکه tor وصل شوم (بسته snowflake-client را نصب کنید).
این هم تنظیماتم در torrc
UseBridges 1
ClientTransportPlugin snowflake exec /usr/bin/snowflake-client
Bridge snowflake 192.0.2.3:80 2B280B23E1107BB62ABFC40DDCC8824814F80A72 fingerprint=2B280B23E1107BB62ABFC40DDCC8824814F80A72 url=https://1098762253.rsc.cdn77.org/ fronts=www.google.com,www.cdn77.com,www.phpmyadmin.net ice=stun:stun.antisip.com:3478,stun:stun.epygi.com:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.mixvoip.com:3478,stun:stun.nextcloud.com:3478,stun:stun.bethesda.net:3478,stun:stun.nextcloud.com:443 utls-imitate=hellorandomizedalpn
Bridge snowflake 192.0.2.4:80 8838024498816A039FCBBAB14E6F40A0843051FA fingerprint=8838024498816A039FCBBAB14E6F40A0843051FA url=https://1098762253.rsc.cdn77.org/ fronts=www.google.com,www.cdn77.com,www.phpmyadmin.net ice=stun:stun.antisip.com:3478,stun:stun.epygi.com:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.mixvoip.com:3478,stun:stun.nextcloud.com:3478,stun:stun.bethesda.net:3478,stun:stun.nextcloud.com:443 utls-imitate=hellorandomizedalpn

البته با سرویس پیشفرض تور (در دبیان) اتصال برقرار نمی‌شد (نفهمیدم چرا و خیلی هم پیگیر نشدم). خودم یک سرویس ساختم و با آن کار می‌کند
20
برنامه‌سازی / vimrc
« آخرین ارسال توسط learner:~$ 10 تیر 1404، 08:56 ب‌ظ »
درود!!
من مجبور شدم آرچ رو حذف کنم و دیبان نصب کنم در همین حین ادیتور مورد علاقه من یعنی زد روی دیبان پشتیبانی نمیشه:(
 از طرفی codium هم سرور های LSP ش نصب نمیشد.

بخاطر همین به سوی او بازگشتم! بازگشت همه به سوی اوست! یعنی ویم!!!!

تنظیمات خیلی اصولی و دقیقی رو برای زبان های سی پلاس پلاس  و پایتون نوشتم!!! اما بیشتر برای سی پلاس پلاس هست. توی این تنظیمات به یک نقطه خیلی توجه کردم؛ سرعت عمل و ابتکار. توی این فایل من پلاگین های زیادی رو نسبت به سری قبل نصب نکردم و زیاد به UI  توجه آنچنانی نکردم (  برخلاف تنظیمات پیشین من ) هرچند که یک تم ساده و عالی برای کسانی که میخوان از چشم هاشون محافظت کنند انتخاب کردم و تمام.

قبل از هرچیز باید این بسته ها رو نصب کنید:
sudo apt install clangd
sudo apt install clang-format
sudo apt install nodejs
البته به بسته های دیگه ایی هم نیاز دارید برای پایتون اما خب فعلا برای من سی پلاس پلاس و سی واجب تر هست!

پلاگین های لازم  برای ویم (  به vim-plug  هم نیاز دارید‌  ):


Plug 'arecarn/vim-fold-cycle'
Plug 'kshenoy/vim-signature'
Plug 'tpope/vim-sensible'
Plug 'vim-airline/vim-airline'
Plug 'dense-analysis/ale'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'dracula/vim'
Plug 'morhetz/gruvbox'
Plug 'preservim/nerdtree'
Plug 'raimondi/delimitmate'
Plug 'ap/vim-buftabline'

ما قراره ویم رو جوری تنظیم کنیم که سرعت عملمون از ۱۰ ه ۱۰۰۰۰۰۰ برسه باور کنید همچین چیزی شدنیه و من باور دارم که قراره بخاطر این تنظمات و شخصی سازی جایزه نوبل ویم رو تقدیم کنند! کم کم باید امسال یک تورینگ ببرم  :P
خب ما قرار چیکار کنیم و به چه چیز هایی نیاز داریم؟ :
فولد و آن فولد کردن؛ مارک کردن ؛ باز کردن تب  (‌به طور کلی همینه )


اول بزارید یکم هیجان زدتون کنم. فرض کنید توی یک فایل هستید که کم کم ۳۰۰ خط کد سی پلاس پلاس توشه و  لازمه که هر دقیقه بین خط ۹۰ و ۲۰۰ جابجا بشید. میتونید دو کار بکنید ۱: شماره خط رو هر دقیقه  تو ویم به این صورت بنویسید:200 یا میتونید یک کار عقلانی تر بکنید. از مارک کردن استفاده بکنید!!!!!!!
یا فرض کنید یک تابع نوشتید که ۶۰ خط و حجم زیادی رو اشغال میکنه شما اون رو به صورت خودکار نمیخواید فولد کنید پس دستی فولدش میکنید. میدونی چقدر سخته و زمان بر هست؟
برای تب هم که واضحه میخواید هم زمان روی چندتا فایل کار کنید و حرکت کنید.البته این یک خلاصه کوچیک بود.
پس بریم شروع کنیم:

let mapleader = " "
syntax on
set  foldenable
set foldmethod=syntax
set foldlevelstart=99     
set foldnestmax=3         
set foldcolumn=1
set fillchars=fold:\
set number
set relativenumber
set mouse=a
set cursorline
set ttyfast
set lazyredraw
set updatetime=300
set clipboard=unnamedplus
set background=dark
set hidden
set ignorecase
set smartcase
set completeopt=menuone,noinsert,noselect
set timeoutlen=3000
filetype plugin indent on
set viewoptions=folds,cursor,slash,unix
set tabstop=8
set shiftwidth=8
set softtabstop=8
set noexpandtab

اول از همه باید باید باید مپ لیدر ما ( دکمه ایی که قراره خیلی زیاد ازش استفاده بشه ) برابر اسپیس باشه که یک سرعب و انعطاف نجومی به ما میده. بعدش باید ویم رو برای شناسایی سینتکس آماده کنیم و چندتا دستور دیگه برای فولد کردن اضافه میکنیم تا بهره وری رو به ۱۰۰ برسونیم ( اگر سوال داشتید که اینها چی هستند و چی کار میکنند بپرسید چون جا نمیشه همش رو توی یک فرسته بنویسم ) بعدش ویم رو برای نشون دادن شماره خط و پشتیبانی از موس آماده میکنیم ( برای تاچ پد هم میشه چون من از موس متنفرم  ) بعدش کاری میکنیم که روی اون خطی که هستیم برجسته بشه و بک گراند رو تیره میکنیم برای تمی که قراره استفاده کنیم.
بعدش باید ویم رو برای افزایش سرعت بهینه کنیم بخاطر همین میگیم ttyfast هست و از ماکرو های غیر ضروری هم خود داری میکنیم. و زمان انتظار برای آپدیت تایم هم ۳۰۰ میلی ثانیه میزاریم و زمان برای انتظار هم ۳ ثانیه ( ۳۰۰۰ میلی ثانیه  چون برای نرمال مود نیاز داریم).
بعدش کاری میکنیم که ویم بتونه از کلیپ بورد هم استفاده بکنه مثلا کنرل +‌سی و بعدش کاری میکنیم که فایل ها بدون ذخیره شدن تو بافر بمونه.
بعد کاری میکنیم موقعیت فولد ها و نشانگر و ... اینجور چیز های ذخیره بشوند.
بعدش یک سری تنظیمات برای حساسیت ویم برای نوشتن رو تنظیم میکنیم. که هم به حروف بزرگ و کوچیک حساس نباشه و هم اگر از حروف بزرگ استفاده کردیم حساس بشه ( خوراک نینجا های  regex  ) بعدش چندتا چیز دیگه برای نمایش پیشنهادات فعال میکنیم ( تقریبا !‌ )‌

این قسمتش خیلی مهمه. من به طور پیش فرض هر تب رو برابر ۸ تا فاصله قرار دارم اینکار باعث میشه که کدم خوانا تر باشه ( از نظر خودم )‌ و اینکه از تب واقعی استفاده میکنم!

خب حالا بریم بخش بعدی:
function! CloseTabByName()
  let name = input("Enter tab path (partial, relative or full): ")
  for i in range(tabpagenr('$'))
    let bufnrs = tabpagebuflist(i + 1)
    for b in bufnrs
      let fullpath = fnamemodify(bufname(b), ':p:.') 
      if fullpath =~? name
        execute (i + 1) . "tabclose"
        echo "Closed tab containing: " . fullpath
        return
      endif
    endfor
  endfor
  echo "No tab found matching: " . name
endfunction
nnoremap <silent> <leader>T :call CloseTabByName()<CR>


بی نظیره بی نظیره واقعا این تابع بی نظیره  این تابع باعث میشه که اسم تبی که میخواید رو بنویسید و بعد ببندید خیلی راحت هم با space + T کار میکنه. هر چند که باید آدرس کامل و مطلق رو براش بنویسید.

nnoremap <silent> <leader>T :call CloseTabByName()<CR>
function! CloseCurrentTab()
  if tabpagenr('$') > 1
    tabclose
    echo "Closed current tab"
  else
    echo "Cannot close the last tab page"
  endif
endfunction

nnoremap <silent> <C-j> :call CloseCurrentTab()<CR>

خب حالا اگر نخواید یک ساعت آدرس به اون تابع ندید و میخواید مثل یک نینجا تب رو ببندید کافیه برید روی تب مورد نظر و crtl + j  رو فشار بدید.
nnoremap <leader>m :marks<CR>

با این دستور لیست مارک هایی که دارید بالا میاد یعنی  space + m  چون بعضی وقت ها یادتون میره چندتا مارک دارید و هرکدوم کجا هستند.
let g:buftabline_numbers = 2       
 nnoremap <silent> <leader>l :tabnext<CR>
 nnoremap <silent> <leader>h :tabprevious<CR>

  دستور اول میزاره که میتونید تبتون رو چک کنید که از ۰ تا ۲ میتونید مقدار دهی کنید ( خودتون بزنید ببینید چی میشه )
ولی دستور دوم و سوم خیلی مهم  با  space + l  به تب بعدی میرید و با  space + h  به تب قبلی ( خودم   اشتباهی  space + p  میزنم شاید تغیرش دادم :( )
autocmd BufWinLeave *.* mkview
autocmd BufWinEnter *.* silent! loadview
let g:fold_cycle_default_mapping = 0 "disable default mappings

خب اینجا هم یک سری تنظیمات عادیه ولی آخریش برای تنظیم فولد کردن که از تنظمات دیفالت عادی جلوگیری میکنه.
nnoremap <leader>u za
colorscheme gruvbox
این دو خط هم عالین خط اول میگه که با  space + u  یک تابع رو به صورت خودکار فولد و آن فولد کنی ( باید بری روی ابتدای کروشه اون تابع )  زیباست نه؟ خط بعدی هم تم مورد علاقه من هست که فوق العادست ( نمیدونم چرا وقتی اسمش رو میبینم یا میشنوم یا  rust  میفتم  ??? )
augroup CppFormat
  autocmd!
  autocmd BufWritePre *.cpp,*.h,*.c call CppFormatPreserveCursor()
augroup END

این تابع هم برای فرمت کردن کد سی پلاس پلاس و سی هست
function! CppFormatPreserveCursor()
  let l:save_cursor = getpos(".")
  silent! %!clang-format
  call setpos('.', l:save_cursor)
endfunction

  این هم برای اینه که وقتی فرمت میکنی نشانگر به ابتدای فایل نپره ‌(‌جا بجا نوشتم جای دو تابع  )
autocmd VimEnter * if argc() == 0 | NERDTree | endif
nnoremap <leader>n :NERDTreeToggle<CR>

خط اول باعث میشه که  وقتی دستور vim  خالی رو اجرا کردید nerdtree  باز بشه و  لیست فایل ها نمایش داده بشوند ( آیکون اضافه نکردم چون بیخوده و فقط حجم اضافه میکنه ) با دستور  space+ n  باز و بستش میکنید
inoremap <expr> <Tab>     pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab>   pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <silent><expr> <CR> pumvisible() ? coc#_select_confirm() : "\<CR>"
این خطوط باعث میشن که وقتی کاکا ویم ( coc-nvim )  برای  lsp  پیشنهاد میده  بتونید از تب و  arrow key  ها استفاده کنید.
let g:ale_linters = {
\   'cpp': ['clangd'],
\   'python': ['flake8'],
\}
let g:ale_fixers = {
\   'cpp':    ['clang-format'],
\   'python': ['black'],
\}

این خطوط هم حتما فعال کنید برای دریافت هشدار ها و اصلاحات
function! s:SafeBlack()
  let l:cmd = 'black --quiet ' . shellescape(expand('%:p'))
  call system(l:cmd)
  if v:shell_error == 0
    silent! edit!
  endif
endfunction

augroup PythonFormat
  autocmd!
  autocmd BufWritePre *.py call s:SafeBlack()
augroup END

فرمت پایتون

let g:airline_powerline_fonts = 1
"
let g:SignatureMarkTextHLDynamic = 1

let g:SignatureMarkText = '⚑'
let g:SignatureMarkerText = '✗'

let g:SignatureIncludeMarks = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

let g:SignaturePrioritizeMarks = 1

تنظیمات مارک کردن
let g:next_mark_idx = 0
let g:mark_list = []

function! s:NextDynamicMark()
  let idx = g:next_mark_idx % 26
  let letter = nr2char(char2nr('a') + idx)

  execute "normal! m" . letter

  if index(g:mark_list, letter) < 0
    call add(g:mark_list, letter)
  endif

  let g:next_mark_idx += 1

  echo ">> mark '" . letter . "' set"
endfunction

nnoremap <silent> ma :call <SID>NextDynamicMark()<CR>


بی نظیره! این تابع باعث میشه که شما بتونید به ترتیب حروف الفبا مارک کنید مثلا اگر روی یک خط هستید و space + ma زدید اولین مارکتون میشه  a  و به همین ترتیب تا آخر ادامه داره برای بقیه خط هااما اگر نمیخواید مشکلی نیست فقط space +m  رو فشار بدید و یکم مکث کنید و حرف دلخواهتون رو بنویسید.
et g:mark_cycle_idx = 0

function! s:JumpNextMark()
  if empty(g:mark_list)
    echo ">> no marks set"
    return
  endif
  let idx = g:mark_cycle_idx % len(g:mark_list)
  let letter = g:mark_list[idx]
  execute "normal! '" . letter
  let g:mark_cycle_idx += 1
endfunction

nnoremap <silent> <leader>j :call <SID>JumpNextMark()<CR>

این تابع باعث میشه که به ترتیب حرف الفبا روی مارک ها حرکت کنید و سراغ مارک بعدی برید یعنی space + j
function! s:JumpToTypedMark()
  let c = nr2char(getchar())
  if c =~# '[a-z]'
    execute "normal! '" . c
  else
    echohl ErrorMsg | echo ">> invalid mark: ".c | echohl None
  endif
endfunction

nnoremap <silent> <leader>v :call <SID>JumpToTypedMark()<CR>

دوست نداری به ترتیب حروف الفبا روی مارک های حرکت کنی و دوست داری بری مستقیم سراغ مارکی که میخوای؟ ایرادی نداره  space + v  بعدش اسم مارکت رو بزن ؛)  و بعد اینتر
function! DeleteMarkOnThisLine()
  let marks = split(execute('marks'), "\n")[1:]

  let currline = line('.')

  for line in marks
    let fields = split(line)
    if len(fields) >= 2
      let mark = fields[0]
      let lnum = str2nr(fields[1])
      if lnum == currline && mark =~# '^[a-zA-Z]$'
        execute 'delmarks ' . mark
call remove(g:mark_list, index(g:mark_list, mark))
        echo ">> Mark '" . mark . "' deleted from line " . lnum
        return
      endif
    endif
  endfor

  echo ">> No mark found on this line"
endfunction

nnoremap <leader>d :call DeleteMarkOnThisLine()<CR>

این تابع باعث میشه وقتی روی یک مارک هستید با زدن  space + d  اون مارک به صورت خودکار حذف بشه!
عالی بود نه؟‌
فایل کامل:‌
let mapleader = " "
syntax on
set  foldenable
set foldmethod=syntax
set foldlevelstart=99     
set foldnestmax=3         
set foldcolumn=1
set fillchars=fold:\
set number
set relativenumber
set mouse=a
set cursorline
set ttyfast
set lazyredraw
set updatetime=300
set clipboard=unnamedplus
set background=dark
set hidden
set ignorecase
set smartcase
set completeopt=menuone,noinsert,noselect
set timeoutlen=3000
filetype plugin indent on
set viewoptions=folds,cursor,slash,unix
set tabstop=8
set shiftwidth=8
set softtabstop=8
set noexpandtab

call plug#begin('~/.vim/plugged')
Plug 'arecarn/vim-fold-cycle'
Plug 'kshenoy/vim-signature'
Plug 'tpope/vim-sensible'
Plug 'vim-airline/vim-airline'
Plug 'dense-analysis/ale'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'dracula/vim'
Plug 'morhetz/gruvbox'
Plug 'preservim/nerdtree'
Plug 'raimondi/delimitmate'
Plug 'ap/vim-buftabline'
call plug#end()


function! CloseTabByName()
  let name = input("Enter tab path (partial, relative or full): ")
  for i in range(tabpagenr('$'))
    let bufnrs = tabpagebuflist(i + 1)
    for b in bufnrs
      let fullpath = fnamemodify(bufname(b), ':p:.') 
      if fullpath =~? name
        execute (i + 1) . "tabclose"
        echo "Closed tab containing: " . fullpath
        return
      endif
    endfor
  endfor
  echo "No tab found matching: " . name
endfunction

nnoremap <silent> <leader>T :call CloseTabByName()<CR>
function! CloseCurrentTab()
  if tabpagenr('$') > 1
    tabclose
    echo "Closed current tab"
  else
    echo "Cannot close the last tab page"
  endif
endfunction

nnoremap <silent> <C-j> :call CloseCurrentTab()<CR>

nnoremap <leader>m :marks<CR>

let g:buftabline_numbers = 2       
 nnoremap <silent> <leader>l :tabnext<CR>
 nnoremap <silent> <leader>h :tabprevious<CR>

autocmd BufWinLeave *.* mkview
autocmd BufWinEnter *.* silent! loadview
let g:fold_cycle_default_mapping = 0 "disable default mappings
nnoremap <leader>u za




colorscheme gruvbox
function! CppFormatPreserveCursor()
  let l:save_cursor = getpos(".")
  silent! %!clang-format
  call setpos('.', l:save_cursor)
endfunction


augroup CppFormat
  autocmd!
  autocmd BufWritePre *.cpp,*.h,*.c call CppFormatPreserveCursor()
augroup END


autocmd VimEnter * if argc() == 0 | NERDTree | endif
nnoremap <leader>n :NERDTreeToggle<CR>


inoremap <expr> <Tab>     pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab>   pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <silent><expr> <CR> pumvisible() ? coc#_select_confirm() : "\<CR>"


let g:ale_linters = {
\   'cpp': ['clangd'],
\   'python': ['flake8'],
\}
let g:ale_fixers = {
\   'cpp':    ['clang-format'],
\   'python': ['black'],
\}

function! s:SafeBlack()
  let l:cmd = 'black --quiet ' . shellescape(expand('%:p'))
  call system(l:cmd)
  if v:shell_error == 0
    silent! edit!
  endif
endfunction

augroup PythonFormat
  autocmd!
  autocmd BufWritePre *.py call s:SafeBlack()
augroup END

let g:airline_powerline_fonts = 1
"
let g:SignatureMarkTextHLDynamic = 1

let g:SignatureMarkText = '⚑'
let g:SignatureMarkerText = '✗'

let g:SignatureIncludeMarks = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

let g:SignaturePrioritizeMarks = 1

"
"
let g:next_mark_idx = 0
let g:mark_list = []

function! s:NextDynamicMark()
  let idx = g:next_mark_idx % 26
  let letter = nr2char(char2nr('a') + idx)

  execute "normal! m" . letter

  if index(g:mark_list, letter) < 0
    call add(g:mark_list, letter)
  endif

  let g:next_mark_idx += 1

  echo ">> mark '" . letter . "' set"
endfunction

nnoremap <silent> ma :call <SID>NextDynamicMark()<CR>

let g:mark_cycle_idx = 0

function! s:JumpNextMark()
  if empty(g:mark_list)
    echo ">> no marks set"
    return
  endif
  let idx = g:mark_cycle_idx % len(g:mark_list)
  let letter = g:mark_list[idx]
  execute "normal! '" . letter
  let g:mark_cycle_idx += 1
endfunction

nnoremap <silent> <leader>j :call <SID>JumpNextMark()<CR>

function! s:JumpToTypedMark()
  let c = nr2char(getchar())
  if c =~# '[a-z]'
    execute "normal! '" . c
  else
    echohl ErrorMsg | echo ">> invalid mark: ".c | echohl None
  endif
endfunction

nnoremap <silent> <leader>v :call <SID>JumpToTypedMark()<CR>

function! DeleteMarkOnThisLine()
  let marks = split(execute('marks'), "\n")[1:]

  let currline = line('.')

  for line in marks
    let fields = split(line)
    if len(fields) >= 2
      let mark = fields[0]
      let lnum = str2nr(fields[1])
      if lnum == currline && mark =~# '^[a-zA-Z]$'
        execute 'delmarks ' . mark
call remove(g:mark_list, index(g:mark_list, mark))
        echo ">> Mark '" . mark . "' deleted from line " . lnum
        return
      endif
    endif
  endfor

  echo ">> No mark found on this line"
endfunction

nnoremap <leader>d :call DeleteMarkOnThisLine()<CR>

تنظیمات کاکا ویم رو در فرسته بعدی میفرستم اما قبلش باید black  رو برای پایتون نصب کنید.
هر سوالی داشتید در خدمتم!
 
صفحه: 1 [2] 3 4 ... 10