番茄助手ctrl+ctrl shift enter+f找到的调用函数名怎么变成in


1 安装好VAS打开VS2010之后,首先关闭VA outline与VA View窗口,个人感觉没啥用,
2 关掉VS的状态栏,感觉它最大的用处就是显示行号,却占用了一整行的屏幕空间,如果你想知道现在的行号,你可以打开行号显示或者按CTRL+G,(还可以直接定位哦,真TMD值),
3 有了VAX可以关掉C++导航栏,因为VSS有,而且功能更强大,快捷键ALT+M,显示当前打开文档的所有符号,而且可以输入进行过滤
4&&& 查找文件,shift+alt+o,(直接定位,更是对项目了心应手的表现)
5&&& 查找符号 shift+alt+s,(很爽很拉风)
6&&& 查找选定的内容,shift+alt+f,比VS2010自带的爽,不信你选定一个函数试试,而且它还有一个clone result功能,(不用不知道)
7&&& shift+alt+r,选定内容改名,用得不多,但很实用(改过名的都知道)
8&&& alt+o,在.h与.cpp文件中实现相互转换
9&&& alt+g,函数声明定位,比VS的还要强大
一般我还会打开vax options-&advanced下面Display的Higtlight current line:老了,眼睛不好用了,关掉underline下面的第一个
本文已收录于以下专栏:
相关文章推荐
有过Java开发经验的人都知道Java的常用开发工具(如Eclipse、Intellij IDEA等)都有非常强大的关键字高亮、智能提示、快速追踪等的功能。那也许你就要问了:进行C++开发的Visua...
课题研究中应用到要生成透明背景的电子签章,所以通过网上搜寻资料以及自己整合最终实现了这项功能。实现图如下:
关键代码如下:
1.在生成panel时,设置为透明
      DrawPanel pa...
人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..
官网讲解:/products/features/vasnippets.asp
一个好的项目工程,注释是必不可少的,vc助手中有一个功能可以帮助...
他的最新文章
讲师:汪剑
讲师:陈守元
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)1、其实,关于RegisterHotKey函数本人写过一个简单的示例,主要是利用这个函数实现全局热键。
具体的链接:
2、本文记录的重点是通过Hot Key控件设置的热键,如何正确的用RegisterHotKey函数注册。
3、思路很清晰,将用户在控件的输入通过函数GetHotKey获得,获取到的值包括两个,一个是热键的组合类型,譬如Ctrl + X、Shift + X、ALT + X或者Ctrl + Shift
+ X,而另一个就是X。
4、但是,我们发现直接将GetHotKey获取到的值代入RegisterHotKey函数执行,有时会出问题。当然,这里所谓的问题不是编译的问题,而是当你注册了一个热键,却发现一直不进热键的消息函数。
5、具体的情况是:
(1)形如Ctrl + X的热键一切正常;
(2)形如Shift + X和Alt + X的热键不响应;
6、如果细心的朋友会发现,当你在控件中设置热键为Shift + X并直接调用函数RegisterHotKey时,其实注册的结果是Alt + X。也就是说,Shift和Alt这两个值搞反了。
7、那么,是不是一个Bug呢?我们不放仔细看一下两者的定义:
(1)RegisterHotkey函数第三个参数的说明:
fsModifiers [in] Specifies keys that must be pressed in combination with the key specified by thenVirtKey parameter in order to generate a WM_HOTKEY message. The
fsModifiers parameter can be a combination of the following values.
Description
Either ALT key must be held down.
MOD_CONTROL
Either CTRL key must be held down.
Both key up events and key down events generate a WM_HOTKEY message.
Either SHIFT key must be held down.
Either WINDOWS key was held down. These keys are labeled with the Microsoft Windows logo.
(2)在看一下GetHotKey第二个参数的说明:
Call this function to retrieve the virtual key code and modifier flags of a hot key from a hot key control.
DWORD GetHotKey( )
void GetHotKey(
Parameters
wVirtualKeyCode Virtual key code of the hot key. For a list of standard virtual key codes, see Winuser.h.wModifiers Modifier flags indicating the keys that, when used in combination with wVirtualKeyCode, define a hot key combination.
Return Value
In the first usage above, a DWORD containing the virtual key code and modifier flags. The low-order word is the virtual key code, and the high-order word is the modifier flags. The HIWORD and LOWORD of this 32-bit value can be used as the
parameters in the SetHotKey member function.
The modifier flags can be a combination of the following values:
HOTKEYF_ALT&&&ALT key HOTKEYF_CONTROL&&&CTRL keyHOTKEYF_EXT&&&Extended keyHOTKEYF_SHIFT&&&SHIFT key&
8、注意我标红的地方,下面我们看一下定义:
(1)Microsoft SDKs\Windows\v7.0A\Include\WinUser.h
#define&MOD_ALT&&&&&&&&&0x0001
#define&MOD_CONTROL&&&&&0x0002
#define&MOD_SHIFT&&&&&&&0x0004
(2)Microsoft SDKs\Windows\v7.0A\Include\CommCtrl.h
#define&HOTKEYF_SHIFT&&&&&&&&&&&0x01
#define&HOTKEYF_CONTROL&&&&&&&&&0x02
#define&HOTKEYF_ALT&&&&&&&&&&&&&0x04
9、这下问题清楚了,提供两个转换函数:
&&&&UINT&ModToHotkey(UINT&fsModifiers)
&&&&&&&&if&(&(fsModifiers&&&MOD_SHIFT)&&&&!(fsModifiers&&&MOD_ALT)&)&
&&&&&&&&&&&&fsModifiers&&=&~MOD_SHIFT;
&&&&&&&&&&&&fsModifiers&|=&HOTKEYF_SHIFT;
&&&&&&&&else&if&(&!(fsModifiers&&&MOD_SHIFT)&&&&(fsModifiers&&&MOD_ALT)&)&
&&&&&&&&&&&&fsModifiers&&=&~MOD_ALT;
&&&&&&&&&&&&fsModifiers&|=&HOTKEYF_ALT;
&&&&&&&&return&fsM
&&&&UINT&HotkeyToMod(UINT&fsModifiers)
&&&&&&&&if&(&(fsModifiers&&&HOTKEYF_SHIFT)&&&&!(fsModifiers&&&HOTKEYF_ALT)&)&
&&&&&&&&&&&&fsModifiers&&=&~HOTKEYF_SHIFT;
&&&&&&&&&&&&fsModifiers&|=&MOD_SHIFT;
&&&&&&&&else&if&(&!(fsModifiers&&&HOTKEYF_SHIFT)&&&&(fsModifiers&&&HOTKEYF_ALT)&)&
&&&&&&&&&&&&fsModifiers&&=&~HOTKEYF_ALT;
&&&&&&&&&&&&fsModifiers&|=&MOD_ALT;
&&&&&&&&return&fsM
本文已收录于以下专栏:
相关文章推荐
声明:本人一个菜鸟,网上搜罗了很多关于VC++编程的资料,可每本资料都是涵盖面太广,难以细致。英语又太烂,所以不得意只得摸索,恐又忘记所以记在此处,若有不对的地方,烦劳指出,不胜感激。
hot key control用法:
A &hot key control& is a window that enables the user to create a hot key.
人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..
控件的消息处理函数是由系统定义好了的,通常情况下,不需要自己提供。
但当需要对控件进行特殊控制时,可以提供一个消息处理函数,替换原来的消息处理函数。
自己的处理完成后,再调用控件的缺省...
设置函数:
 m_ComPort.SetRThreshold(1);//接收缓冲区有大于等于1个字符时,将引发接收数据的OnCommMscomm事件
此函数并不是说串口来一个数据就会进中断处理...
在这个地方主要说一下给按钮控件添加双击消息,因为我们给按按钮控件添加双击消息的时候,并且创建一个函数发现并没有触发这个消息,,比如:
void CABDlg::OnDoubleclickedButt...
要设置快捷键必须使用user32.dll下面的两个方法。
BOOL RegisterHotKey( //注册系统热键的API函数
 HWND hWnd,
转自:/article.asp?id=84
要设置快捷键必须使用user32.dll下面的两个方法。
BOOL RegisterHotKey( //注册...
一下介绍的内容均在vc6.0 MFC程序调试通过。【一】热键的使用主要使用RegisterHotKey和UnregisterHotKey两个API函数,具体介绍请看MSDN。这里以编辑框作为示例,先建...
VC++编写ActiveX控件
作者:一点一滴的Beer
     暑假在做一个项目的时候,本来是用C#.NET来写的一个港口进...
他的最新文章
讲师:汪剑
讲师:陈守元
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。Ctrl+L 选中整行,继续操作则继续选择下一行,效果和 Shift+& 效果一样。Ctrl+Shift+L 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。Ctrl+Shift+M 选择括号内的内容(继续选择父括号)。举个栗子:快速选中删除函数中的代码,重写函数体代码或重写括号内里的内容。Ctrl+M 光标移动至括号内结束或开始的位置。Ctrl+Enter 在下一行插入新行。举个栗子:即使光标不在行尾,也能快速向下插入一行。Ctrl+Shift+Enter 在上一行插入新行。举个栗子:即使光标不在行首,也能快速向上插入一行。Ctrl+Shift+[ 选中代码,按下快捷键,折叠代码。Ctrl+Shift+] 选中代码,按下快捷键,展开代码。Ctrl+K+0 展开所有折叠代码。Ctrl+& 向左单位性地移动光标,快速移动光标。Ctrl+& 向右单位性地移动光标,快速移动光标。shift+& 向上选中多行。shift+& 向下选中多行。Shift+& 向左选中文本。Shift+& 向右选中文本。Ctrl+Shift+& 向左单位性地选中文本。Ctrl+Shift+& 向右单位性地选中文本。Ctrl+Shift+& 将光标所在行和上一行代码互换(将光标所在行插入到上一行之前)。Ctrl+Shift+& 将光标所在行和下一行代码互换(将光标所在行插入到下一行之后)。Ctrl+Alt+& 向上添加多行光标,可同时编辑多行。Ctrl+Alt+& 向下添加多行光标,可同时编辑多行。
Ctrl+J 合并选中的多行代码为一行。举个栗子:将多行格式的CSS属性合并为一行。Ctrl+Shift+D
复制光标所在整行,插入到下一行。Tab 向右缩进。Shift+Tab 向左缩进。Ctrl+K+K 从光标处开始删除代码至行尾。Ctrl+Shift+K 删除整行。Ctrl+/ 注释单行。Ctrl+Shift+/ 注释多行。Ctrl+K+U 转换大写。Ctrl+K+L 转换小写。Ctrl+Z 撤销。Ctrl+Y 恢复撤销。Ctrl+U 软撤销,感觉和 Gtrl+Z 一样。Ctrl+F2 设置书签Ctrl+T 左右字母互换。F6 单词检测拼写
Ctrl+F 打开底部搜索框,查找关键字。Ctrl+shift+F 在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找,略高端,未研究。Ctrl+P 打开搜索框。举个栗子:1、输入当前项目中的文件名,快速搜索文件,2、输入@和关键字,查找文件中函数名,3、输入:和数字,跳转到文件中该行代码,4、输入#和关键字,查找变量名。Ctrl+G 打开搜索框,自动带:,输入数字跳转到该行代码。举个栗子:在页面代码比较长的文件中快速定位。Ctrl+R 打开搜索框,自动带@,输入关键字,查找文件中的函数名。举个栗子:在函数较多的页面快速查找某个函数。Ctrl+: 打开搜索框,自动带#,输入关键字,查找文件中的变量名、属性名等。Ctrl+Shift+P 打开命令框。场景栗子:打开命名框,输入关键字,调用sublime text或插件的功能,例如使用package安装插件。Esc 退出光标多行选择,退出搜索框,命令框等。
Ctrl+Tab 按文件浏览过的顺序,切换当前窗口的标签页。Ctrl+PageDown 向左切换当前窗口的标签页。Ctrl+PageUp 向右切换当前窗口的标签页。Alt+Shift+1 窗口分屏,恢复默认1屏(非小键盘的数字)Alt+Shift+2 左右分屏-2列Alt+Shift+3 左右分屏-3列Alt+Shift+4 左右分屏-4列Alt+Shift+5 等分4屏Alt+Shift+8 垂直分屏-2屏Alt+Shift+9 垂直分屏-3屏Ctrl+K+B 开启/关闭侧边栏。F11 全屏模式Shift+F11 免打扰模式
阅读(...) 评论()1490人阅读
1. shift + F6可以理解为F2的豪华重量版,不但可以重命名文件名,而且可以命名函数名,函数名可以搜索引用的文件,还可以重命名局部变量。还可以重命名标签名。在中有个类似的快捷键:ctrl+shift+d。
1. search in comments and strings
会搜索注释或变量内容。
2. search for text occurrences
这个没搞明白有什么意思,请其它高手指教。
具体看我的演示。
3. shift + F6:
除了重构函数名,之外还可以重构div闭合标签等等。见图3演示,其它的功能等你去挖掘。
&替换局部变量:
&!doctype html&
&meta charset=&UTF-8&&
&title&s&/title&
&span&豪情&/span&
&script type=&text/javascript& src=&test-inc.js&&&/script&
// 欢迎访问 
function incfoo2222(){
// 欢迎访问 
incfoo2222();
var test = 'incfoo';
2. 软回车(shift+enter, ctrl+shift+enter我改为ctrl+enter,使与sublime text保持一致),这个快捷键也支持:
除了这个快捷键之外,还有一个软回车,是经常用到的。
就是不论光标在当前行的任何位置,都可以跳转到下一行。
3. alt + 左右方向键,快速切换tab选项卡:
如果你是一个前端,或者非前端,在多个文件中来回切换,这个快捷键能帮到你。
keymap设置:
4. 另外一个切换project工程目录的 alt + 1 ,只能切回去不能切回来,所以还要添加到Hide Active Tool Window中去:
5. 移动视图,方便快捷的移动代码窗口: ctrl + up, down
6. 代码方法间快速跳转:alt + up, down
7. 快速寻找方法,变量定义处:ctrl + b或者ctrl+单击:
&8. 选中字符 ctrl+w,连续可以多重扩展:
文中使用的截图工具:
AshampooSnap,GifCam2.0汉化绿色版
扫扫关注“茶爸爸”微信公众号
坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1254859次
积分:9384
积分:9384
排名:第2014名
原创:123篇
转载:196篇
评论:190条
(1)(3)(3)(1)(3)(1)(3)(3)(3)(4)(3)(7)(6)(27)(32)(11)(6)(9)(3)(4)(3)(21)(16)(3)(3)(19)(32)(8)(1)(1)(1)(2)(1)(3)(1)(1)(3)(2)(2)(4)(1)(4)(2)(2)(1)(2)(2)(4)(10)(17)(6)(2)(2)(1)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'Sublime Text 3 快捷键精华版
Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+Shift+L:选择多行Ctrl+Shift+Enter:在当前行前插入新行Ctrl+X:删除当前行Ctrl+M:跳转到对应括号Ctrl+U:软撤销,撤销光标位置Ctrl+J:选择标签内容Ctrl+F:查找内容Ctrl+Shift+F:查找并替换Ctrl+H:替换Ctrl+R:前往 methodCtrl+N:新建窗口Ctrl+K+B:开关侧栏Ctrl+Shift+M:选中当前括号内容,重复可选着括号本身Ctrl+F2:设置/删除标记Ctrl+/:注释当前行Ctrl+Shift+/:当前位置插入注释Ctrl+Alt+/:块注释,并Focus到首行,写注释说明用的Ctrl+Shift+A:选择当前标签前后,修改标签用的F11:全屏Shift+F11:全屏免打扰模式,只编辑当前文件Alt+F3:选择所有相同的词Alt+.:闭合标签Alt+Shift+数字:分屏显示Alt+数字:切换打开第N个文件Shift+右键拖动:光标多不,用来更改或插入列内容鼠标的前进后退键可切换Tab文件按Ctrl,依次点击或选取,可需要编辑的多个位置按Ctrl+Shift+上下键,可替换行
Ctrl+D&选中光标所占的文本,继续操作则会选中下一个相同的文本。
Alt+F3&选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。
Ctrl+L&选中整行,继续操作则继续选择下一行,效果和&Shift+↓&效果一样。
Ctrl+Shift+L&先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。
Ctrl+Shift+M&选择括号内的内容(继续选择父括号)。举个栗子:快速选中删除函数中的代码,重写函数体代码或重写括号内里的内容。
Ctrl+M&光标移动至括号内结束或开始的位置。
Ctrl+Enter&在下一行插入新行。举个栗子:即使光标不在行尾,也能快速向下插入一行。
Ctrl+Shift+Enter&在上一行插入新行。举个栗子:即使光标不在行首,也能快速向上插入一行。
Ctrl+Shift+[&选中代码,按下快捷键,折叠代码。
Ctrl+Shift+]&选中代码,按下快捷键,展开代码。
Ctrl+K+0&展开所有折叠代码。
Ctrl+←&向左单位性地移动光标,快速移动光标。
Ctrl+→&向右单位性地移动光标,快速移动光标。
shift+↑&向上选中多行。
shift+↓&向下选中多行。
Shift+←&向左选中文本。
Shift+→&向右选中文本。
Ctrl+Shift+←&向左单位性地选中文本。
Ctrl+Shift+→&向右单位性地选中文本。
Ctrl+Shift+↑&将光标所在行和上一行代码互换(将光标所在行插入到上一行之前)。
Ctrl+Shift+↓&将光标所在行和下一行代码互换(将光标所在行插入到下一行之后)。
Ctrl+Alt+↑&向上添加多行光标,可同时编辑多行。
Ctrl+Alt+↓&向下添加多行光标,可同时编辑多行。
Ctrl+J&合并选中的多行代码为一行。举个栗子:将多行格式的CSS属性合并为一行。
Ctrl+Shift+D&复制光标所在整行,插入到下一行。
Tab&向右缩进。
Shift+Tab&向左缩进。
Ctrl+K+K&从光标处开始删除代码至行尾。
Ctrl+Shift+K&删除整行。
Ctrl+/&注释单行。
Ctrl+Shift+/&注释多行。
Ctrl+K+U&转换大写。
Ctrl+K+L&转换小写。
Ctrl+Z&撤销。
Ctrl+Y&恢复撤销。
Ctrl+U&软撤销,感觉和&Gtrl+Z&一样。
Ctrl+F2&设置书签
Ctrl+T&左右字母互换。
F6&单词检测拼写
Ctrl+F&打开底部搜索框,查找关键字。
Ctrl+shift+F&在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找,略高端,未研究。
Ctrl+P&打开搜索框。举个栗子:1、输入当前项目中的文件名,快速搜索文件,2、输入@和关键字,查找文件中函数名,3、输入:和数字,跳转到文件中该行代码,4、输入#和关键字,查找变量名。
Ctrl+G&打开搜索框,自动带:,输入数字跳转到该行代码。举个栗子:在页面代码比较长的文件中快速定位。
Ctrl+R&打开搜索框,自动带@,输入关键字,查找文件中的函数名。举个栗子:在函数较多的页面快速查找某个函数。
Ctrl+:&打开搜索框,自动带#,输入关键字,查找文件中的变量名、属性名等。
Ctrl+Shift+P&打开命令框。场景栗子:打开命名框,输入关键字,调用sublime text或插件的功能,例如使用package安装插件。
Esc&退出光标多行选择,退出搜索框,命令框等。
Ctrl+Tab&按文件浏览过的顺序,切换当前窗口的标签页。
Ctrl+PageDown&向左切换当前窗口的标签页。
Ctrl+PageUp&向右切换当前窗口的标签页。
Alt+Shift+1&窗口分屏,恢复默认1屏(非小键盘的数字)
Alt+Shift+2&左右分屏-2列
Alt+Shift+3&左右分屏-3列
Alt+Shift+4&左右分屏-4列
Alt+Shift+5&等分4屏
Alt+Shift+8&垂直分屏-2屏
Alt+Shift+9&垂直分屏-3屏
Ctrl+K+B&开启/关闭侧边栏。
F11&全屏模式
Shift+F11&免打扰模式
配置编译环境
控制台输入(以C++为例)
原理很简单,就是在外部建立一个用来执行文件的 bat,然后调用它。注意的就是,需要用start 来打开一个新窗口,同时需要 pause 一下来看结果,其中很蛋疼的就是Sublime默认后台执行你的start,如果你的pause和start放在一个文件了pause对start %1 的文件是无效的,因此其实需要建立两个文件。注意环境变量。。。(关于什么是环境变量,三两句解释不清楚,最好自己百度一下。)
配好之后个人感觉控制台输入意义不是很大,做题的话都是从文件读入,做开发基本不需要读入。So~ 各位慎重。
MyCRun.bat
@echo&off &
echo&-------------------&&
MyCallRun.bat
@start&&MyCRun&%1 &
配置文件在&Sublime Text 3\Packages\C++.sublime-package&。 先备份一下。
修改里面的&C++.sublime-build 为
&&&&"shell_cmd":&"g++&\"${file}\"&-o&\"${file_path}/${file_base_name}\"",&&
&&&&"file_regex":&"^(..[^:]*):([0-9]+):?([0-9]+)?:?&(.*)$",&&
&&&&"working_dir":&"${file_path}",&&
&&&&"selector":&"source.c,&source.c++",&&
&&&&"variants":&&
&&&&&&&&{&&
&&&&&&&&&&&&"name":&"Run",&&
&&&&&&&&&&&&"shell_cmd":&"g++&\"${file}\"&-o&\"${file_path}/${file_base_name}\"&&&&MyCallRun&\"${file_path}/${file_base_name}.exe\""&&&&//&&其实就是这里加了个MyCallRun&&
&&&&&&&&}&&
Sublime Text 3 默认配置好了 c++ 。但是需要你自己把 gcc 目录添加进环境变量
Sublime Text 3 默认只运行了 javac,需要自己添加运行。
苦逼看不懂 Sublime 的命令格式,于是把 javac 改成一个自己的bat。(感觉也可以像C++那样用 && 连起来)
在命令行可直接访问的地方建立 myJRun.bat (我直接放在 jdk/bin 下了)
@ECHO&OFF&&&&
cd&%~dp1&&&&
ECHO&Compiling&%~nx1...&&&&
IF&EXIST&%~n1.class&(&&&&
DEL&%~n1.class&&&&
javac&%~nx1&&&&
IF&EXIST&%~n1.class&(&&&&
ECHO&Running...&&
ECHO&----------------------OUTPUT----------------------&&
java&%~n1&&&&
注意不能使用 cls 。
修改java的编译选项(备份好原来的)。
目录:Packages/Java.sublime-package/JavaC.sublime-build
&&&&"shell_cmd":&"myJRun.bat&\"$file\"",&&
&&&&"file_regex":&"^(...*?):([0-9]*):?([0-9]*)",&&
&&&&"selector":&"source.java"&&
这样以后写的Java代码点 Build 就会自动运行了。
这种办法不能跨平台,再研究研究Sublime自己的方式。
用 Sublime 开发 golang 的环境很简单,只需要安装一个 GoSublime 就差不多了
阅读(...) 评论()

我要回帖

更多关于 ctrl shift alt t 的文章

 

随机推荐