Linux 使用技巧总结
(noilinux or ubuntu 22.04)
结合高中时用 linux 的一些技巧,并加入一些大学以后用到的 linux 常识。
终端的基本命令
忘了就 -h
或 --help
或 man
cd Desktop
size filename
sudo apt update
sudo apt-get install firefox
sudo apt install --only -upgrade firefox
#换源(清华源https://mirror.tuna.tsinghua.edu.cn)更快
cp filea fileb
cat filename
rm filename
mv filea fileb
mv file noi/
cp file noi/
diff filea fileb -w #ignore行末空格文末回车
vimdiff filea fileb
pkill gedit
pkill gedit -9
cpp相关
编译命令:g++ filename.cpp -O2 -Wall -Wl,--stack=112345678 -fsanitize=address -std=c++11 -fsanitize=undefined -ftrapv -g
,其中-fsanitize=address
检查内存泄漏,找到 #0 0x80488e2
这样的16进制数后 addr2line 0x80488e2 -e ./test
就能获取行号,ftrapv
检查爆int or longlong。注意不 -o filename
自动生成到 a.out
make b
: 自动执行 g++ b.cpp -o b
nl a.cpp #display a.cpp, including number of lines
./c > outputfile
./c < inputfile
vimdiff a b
#对拍
mkdir checker
cd checker/
vim a.cpp
vim b.cpp
vim maker.cpp
vim checker.cpp
make a
make b
make maker
make checker
- gdb 调试:
g++ a.cpp -o a -g
gdb a
b 6 #在第6行加断点
r #run
p a #print a
p a+b #print a+b
q #quit
- 写 Makefile :
vim Makefile
a : a.cpp
g++ a.cpp -o a -Wall -std=c++11
( \(a\) 依赖于 a.cpp
)
以后就可以 make a
了。(如果没有 Makefile 默认 g++ a.cpp -o a
)
杂
- time
time ./a
: 会显示 real ...s user ...s sys ...s
,其中 real 是运行时间(不要标准输入)。
也可 \time -f "%U %M" ./test
(-format "User time, Memory(KB)"),user time 不计IO等待时间。但可能需要安装 \time
- 多命令行:Ctrl shift T 新建,Ctrl Pageup/Pagedown 切换
- 开栈:
ulimit -a
获取信息(stack size是栈大小,单位KB);ulimit -s 102400
:开100MB的系统栈;help ulimit
for help. - Language:有的 Linux 是可以敲中文的,按
shift
键即可。但是好像只有键盘左边的那个shift
管用。
vim相关
oi wiki : Vim
或者直接在终端里敲打开 vimtutor
就有教学。
各种模式
默认普通模式,按 v
进入可视模式,按 i
进入插入模式。
按 :
会出现单行模式,相当于一个小型的命令行界面。
一些快捷键
普通模式下按 G (大写)跳至行末,然后按 v 进入可视模式,然后按 gg 跳至开头,就可以实现“全选”操作了。
vim中复制粘贴时缩进混乱的解决方法
首先把光标搞到最左上角,然后按Ctrl V
,G
(大写),=
,就好了。
.vimrc
方法:在 ~
目录下建立一个 .vimrc
文件。可以直接在终端敲 vim .vimrc
set tabstop=2 //手敲 tab 两缩进
set shiftwidth=2 //自动缩进两缩进
set autoindent //自动缩进
set cindent //c风格自动缩进
set ruler //右下角显示行数列数
set nu //左边显示行号
nnoremap <F9> : call CompileRunGcc()<CR> //(普通模式下)一键编译运行
func! CompileRunGcc() //运行函数
exec "w" //以下相当于在 vim 的普通模式下的“命令行”的输入
exec '!g++ % -o %<' // % 表示当前文件名,%<表示去除当前文件名后面的后缀名以后的名字
exec '!time ./%<'//似乎单引号双引号都行,并且单引号可以少打一些 '\'
endfunc
nnoremap <F12> : call Clr()<CR> //(普通模式下)清空命令行
func! Clr()
exec "!clear"
endfunc
所有这些配置均可在普通模式下的“命令行”中直接输入,只会生效一次。
vim 小技巧
复制粘贴:在 vim 里面的复制粘贴直接用 y 和 p 就好,用法见上面的 vimtutor;如果想要复制粘贴到 vim 外面,可以手动用鼠标拖拽出想要复制的区域,Ctrl + shift + c。可能需要先Ctrl--,需要有一定的眼力;也可以 :!cat %
,也可以 :!gedit %&
。
关于 vim 的分屏:如果直接用:sp a.cpp
的话,会分成上下两个屏幕,与平时习惯不符。使用 :vs a.cpp
可以方便地分成左右两个屏幕。
目前使用的 .vimrc
注意 time
那行要用单引号,否则需要敲更多的 \
set autoindent
set cindent
set mouse=a
set shiftwidth=2
set tabstop=2
set nu
set ruler
nmap<F9> : call Jzp() <CR>
func! Jzp()
exec "w"
exec "!clear"
exec "!g++ % -o %< -fsanitize=address -ftrapv -Wall -g"
exec '!\time -f "time : \%U memo : \%M" ./%<'
endfunc
nmap<F12> : call Zzz() <CR>
func! Zzz()
exec "w"
exec "!clear"
exec '!g++ % -o %< -O2'
exec '!\time -f "time : \%U memo : \%M" ./%<'
endfunc
(以下为20230213版本)
set tabstop=2
set shiftwidth=2
set autoindent
autocmd FileType cpp set cindent
set ruler
set nu
set mouse=a
autocmd FileType cpp nmap<F8> : !g++ % -o %<
autocmd FileType cpp nmap<F9> : call Compile_cpp() <CR>
func! Compile_cpp()
exec "w"
exec "!clear"
exec "!g++ % -o %< -fsanitize=address -ftrapv -Wall -g"
endfunc
autocmd FileType cpp nmap<F12> : call Execute_cpp() <CR>
func! Execute_cpp()
exec '!\time ./%<'
endfunc
autocmd FileType sh nmap<F9> : call Execute_sh() <CR>
func! Execute_sh()
exec "w"
exec "!clear"
exec "!./%"
endfunc
nmap<F9> : !python3 %
标签:总结,set,技巧,exec,++,time,vim,Linux,cpp
From: https://www.cnblogs.com/JiaZP/p/17234340.html